欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.NET之后臺(tái)用戶(hù)權(quán)限管理實(shí)現(xiàn)

 更新時(shí)間:2013年02月22日 16:46:24   作者:  
在功能性比較強(qiáng)大的后臺(tái)管理網(wǎng)站處于各種角度考慮多有應(yīng)用權(quán)限管理功能。以公司內(nèi)部管理系統(tǒng)為例,管理員根據(jù)不同員工所在不同部門(mén)賦予其不同權(quán)限,或者根據(jù)上下級(jí)隸屬關(guān)系實(shí)現(xiàn)“金字塔”管理。本文內(nèi)容有不盡不實(shí)之處懇請(qǐng)指正。

序:在功能性比較強(qiáng)大的后臺(tái)管理網(wǎng)站處于各種角度考慮多有應(yīng)用權(quán)限管理功能。以公司內(nèi)部管理系統(tǒng)為例,管理員根據(jù)不同員工所在不同部門(mén)賦予其不同權(quán)限,或者根據(jù)上下級(jí)隸屬關(guān)系實(shí)現(xiàn)“金字塔”管理。本文內(nèi)容有不盡不實(shí)之處懇請(qǐng)指正。

正文:
如下效果圖是否令某用戶(hù)具備相應(yīng)權(quán)限用checkbox狀態(tài)區(qū)別存儲(chǔ)。

(一)儲(chǔ)存
這里的權(quán)限功能(類(lèi)別)名稱(chēng)和權(quán)限模塊(具體)名稱(chēng)均是手動(dòng)輸入數(shù)據(jù)庫(kù),不可增刪改查。本例將某權(quán)限模塊作為最基本元素,是否具備該權(quán)限用1或0表示,進(jìn)而將當(dāng)前用戶(hù)所有權(quán)限鏈接組成二進(jìn)制字符串儲(chǔ)存在數(shù)據(jù)庫(kù)中。如示例代碼1.1

(二)讀取 如示例代碼1.2


(三)前臺(tái)代碼 如下

復(fù)制代碼 代碼如下:

//利用js添加逗號(hào)和豎線 ,通過(guò)hidden傳值

<script language="javascript" type="text/javascript">

function getcheck() {
var inputs = document.getElementById("cbpanel");
var chks = inputs.getElementsByTagName("input");
var str = "";
for (var i = 0; i < chks.length; i++) {
if (chks[i].type == 'checkbox') {
str += chks[i].value + "," + chks[i].checked + "|";
}
}
document.getElementById("Hidden1").value = str;
}

<script>

<body>

<div id="cbpanel"> <asp:Literal ID="LiteralRole" runat="server"></asp:Literal>

<input id="Hidden1" runat="server" type="hidden" /></div>

</body>


復(fù)制代碼 代碼如下:

示例代碼1.2
 /// <summary>
         /// 綁定所有模塊分類(lèi)
         /// </summary>
         private void BindAllModule()
         {
             StringBuilder sb = new StringBuilder();
             sb.Append("<table class=\"AddRole\" width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">");
             Bll_User_Module mbll = new Bll_User_Module();
             IList<User_Model.Model_User_Module> list = mbll.GetAllList();//得到泛型集合
              string moduleidstr = "";
              for (int i = 0; i < list.Count; i++)
              {
                  sb.Append("<tr><th style=\"width: 100px; height: 36px;\">");
                  sb.Append(list[i].ModuleName);
                  sb.Append("</th>");
                  sb.Append("<td>");
                  sb.Append("{" + list[i].ID + "}");
                  sb.Append("</td></tr>");
                  moduleidstr += list[i].ID.ToString() + ",";
              }
              sb.Append("</table>");

              if (Request.QueryString["nid"] != null)
              {
                  //修改
                  BLL_User_Role mrbll = new BLL_User_Role();

                  User_Model.Model_User_Role mrmodel = mrbll.GetModel(Convert.ToInt32(Request.QueryString["nid"]));
                  string RoleActions = mrmodel.RoleAction;
                  BindAllFunction(moduleidstr, sb, RoleActions);
              }
              else
              {
                  //新增
                  BindAllFunction(moduleidstr, sb, "");
              }
         }
         /// <summary>
         /// 綁定每個(gè)模塊中的各個(gè)功能選項(xiàng)
         /// </summary>
         /// <param name="moduleidstr">模塊數(shù)</param>
         /// <param name="sb">html表格</param>
         /// <param name="RoleActions">權(quán)限二進(jìn)制字符串</param>
         private void BindAllFunction(string moduleidstr, StringBuilder sb, string RoleActions)
         {
             Bll_User_Function bll = new Bll_User_Function();
             IList<User_Model.Model_User_Function> list = bll.GetAllList();//功能表泛型集合
             moduleidstr = moduleidstr.TrimEnd(',');//用逗號(hào)間隔功能模塊數(shù)
             string[] str = moduleidstr.Split(',');//移除逗號(hào),以數(shù)組形式保存
             for (int i = 0; i < str.Length; i++)//循環(huán)數(shù)組
             {
                 StringBuilder funsb = new StringBuilder();
                 for (int j = 0; j < list.Count; j++)
                 {
                     if (list[j].ModuleNo == Convert.ToInt32(str[i]))
                     {
                         if (RoleActions == "")
                         {
                             //新增
                             funsb.Append("<input id=\"" + list[j].FuncNo.ToString() + "\" type=\"checkbox\" checked=\"checked\" value=\"" + list[j].FuncNo.ToString() + "\" />");
                             funsb.Append(list[j].FuncName + "&nbsp;&nbsp;");
                         }
                         else
                         {
                             //修改
                             if (RoleActions.Length >= list[j].FuncNo)
                             {
                                 //FuncNO代表當(dāng)前權(quán)限位于二進(jìn)制字符索引值
                                 if (RoleActions.Substring(list[j].FuncNo - 1, 1) == "1")//截取權(quán)限二進(jìn)制字符串并判斷其狀態(tài)
                                 {
                                     //選中狀態(tài)
                                     funsb.Append("<input id=\"" + list[j].FuncNo.ToString() + "\" type=\"checkbox\" checked=\"checked\" value=\"" + list[j].FuncNo.ToString() + "\" />");
                                     funsb.Append(list[j].FuncName + "&nbsp;&nbsp;");
                                 }
                                 else
                                 {
                                     //非選中狀態(tài)
                                     funsb.Append("<input id=\"" + list[j].FuncNo.ToString() + "\" type=\"checkbox\" value=\"" + list[j].FuncNo.ToString() + "\" />");
                                     funsb.Append(list[j].FuncName + "&nbsp;&nbsp;");
                                 }
                             }
                             else
                             {
                                 funsb.Append("<input id=\"" + list[j].FuncNo.ToString() + "\" type=\"checkbox\" value=\"" + list[j].FuncNo.ToString() + "\" />");
                                 funsb.Append(list[j].FuncName + "&nbsp;&nbsp;");
                             }
                         }
                     }
                 }
                 //替換功能項(xiàng)
                 sb.Replace("{" + str[i] + "}", funsb.ToString());
             }
             LiteralRole.Text = sb.ToString();     
         }

 // 保存(更新)事件
 protected void Submit_Click(object sender, EventArgs e)
 {
 string cbstr = Hidden1.Value;//獲取前臺(tái)hidden傳值,如 “1,true|2,true|3,false|4,true”形式

 ........

 }

復(fù)制代碼 代碼如下:

示例代碼1.1
 /// <summary>
         /// 生成角色二進(jìn)制字符串
         /// </summary>
         /// <param name="str"></param>
         /// <returns>二進(jìn)制序列</returns>
         private string GenerateRoleAction(string str)
         {
            //虛擬表構(gòu)建兩列存儲(chǔ)權(quán)限序列號(hào)及其狀態(tài)
             DataTable dt = new DataTable();
             DataColumn col1 = new DataColumn("funno", typeof(int));
             dt.Columns.Add(col1);
             DataColumn col2 = new DataColumn("flag");
             dt.Columns.Add(col2);

             string[] strarray = str.TrimEnd('|').Split('|');//截取任意兩個(gè)二進(jìn)制元素之間豎線
             for (int i = 0; i < strarray.Length; i++)
             {
                 DataRow dr = dt.NewRow();
                 dr[0] = strarray[i].Split(',')[0];//權(quán)限序列號(hào)
                 dr[1] = strarray[i].Split(',')[1];//權(quán)限狀態(tài),用true和false區(qū)別記錄
                 dt.Rows.Add(dr);
             }

             dt.DefaultView.Sort = "funno asc";
             DataTable dttemp = dt.DefaultView.ToTable();
             //將狀態(tài)列轉(zhuǎn)換為二進(jìn)制字符
             string s = "";
             for (int j = 0; j < dttemp.Rows.Count; j++)
             {
                 if (dttemp.Rows[j]["flag"].ToString().ToLower() == "true")
                 {
                     s += "1";//選中狀態(tài)(true,即具備該權(quán)限)用1表示
                 }
                 else
                 {
                     s += "0";//非選中狀態(tài)(false,即不具備該權(quán)限)用0表示
                 }
             }
             return s;//返回象征權(quán)限的二進(jìn)制字符串
         }

相關(guān)文章

  • asp.net實(shí)現(xiàn)導(dǎo)出DataTable數(shù)據(jù)到Word或者Excel的方法

    asp.net實(shí)現(xiàn)導(dǎo)出DataTable數(shù)據(jù)到Word或者Excel的方法

    這篇文章主要介紹了asp.net實(shí)現(xiàn)導(dǎo)出DataTable數(shù)據(jù)到Word或者Excel的方法,涉及asp.net操作office文件的相關(guān)技巧,需要的朋友可以參考下
    2016-08-08
  • asp.net JSON 序列化技術(shù)分析

    asp.net JSON 序列化技術(shù)分析

    很多人看到的實(shí)例都是通過(guò)MS AJAX進(jìn)行PageMethod的調(diào)用,但因?yàn)榻鼉赡晡④浽谧鯝SP.NET與jQuery方面的合作實(shí)驗(yàn),我們其實(shí)也可以通過(guò)jQuery進(jìn)行PageMethod的調(diào)用。
    2010-03-03
  • ASP.NET Core 3.x 并發(fā)限制的實(shí)現(xiàn)代碼

    ASP.NET Core 3.x 并發(fā)限制的實(shí)現(xiàn)代碼

    這篇文章主要介紹了ASP.NET Core 3.x 并發(fā)限制的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • MvcPager分頁(yè)控件使用注意事項(xiàng)

    MvcPager分頁(yè)控件使用注意事項(xiàng)

    這篇文章主要為大家詳細(xì)介紹了MvcPager分頁(yè)控件使用的注意事項(xiàng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 讓GridView只更新某些特定的數(shù)據(jù)的方法

    讓GridView只更新某些特定的數(shù)據(jù)的方法

    我又不希望所有的數(shù)據(jù)都可以修改,只希望修改某些特定的列,用下面的方法即可
    2008-10-10
  • 用vs調(diào)試sql存儲(chǔ)過(guò)程圖文介紹

    用vs調(diào)試sql存儲(chǔ)過(guò)程圖文介紹

    想必大家應(yīng)該有給存儲(chǔ)過(guò)程找錯(cuò)誤的經(jīng)歷吧,一遍遍的去讀sql代碼,一句一句的測(cè)試,發(fā)現(xiàn)一個(gè)小錯(cuò)誤可能都要用很長(zhǎng)的時(shí)間,接下來(lái)將介紹使用vs2010調(diào)試存儲(chǔ)過(guò)程,感興趣的朋友可以不要錯(cuò)過(guò)了啊
    2013-02-02
  • 輕量級(jí)ORM框架Dapper應(yīng)用之實(shí)現(xiàn)CURD操作

    輕量級(jí)ORM框架Dapper應(yīng)用之實(shí)現(xiàn)CURD操作

    這篇文章介紹了使用Dapper實(shí)現(xiàn)CURD操作的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Asp.Net Core用NLog記錄日志操作方法

    Asp.Net Core用NLog記錄日志操作方法

    在本篇文章里小編給大家整理的是一篇關(guān)于Asp.Net Core用NLog記錄日志操作方法以及相關(guān)知識(shí)點(diǎn),需要的朋友們可以學(xué)習(xí)下。
    2019-10-10
  • 解析ABP框架中的事務(wù)處理和工作單元

    解析ABP框架中的事務(wù)處理和工作單元

    ABP是"ASP.NET Boilerplate Project(ASP.NET樣板項(xiàng)目)"的簡(jiǎn)稱(chēng),是一個(gè)建立在.NET之上的Web開(kāi)發(fā)框架,下面我們來(lái)解析ABP框架中的事務(wù)處理和工作單元
    2016-06-06
  • .NET?6開(kāi)發(fā)TodoList應(yīng)用實(shí)現(xiàn)系列背景

    .NET?6開(kāi)發(fā)TodoList應(yīng)用實(shí)現(xiàn)系列背景

    這篇文章主要介紹了.NET?6開(kāi)發(fā)TodoList應(yīng)用實(shí)現(xiàn)系列背景,NET?6是一個(gè)很優(yōu)秀的框架,這一點(diǎn)自從我最開(kāi)始接觸.NET?Core?2起一年一年進(jìn)化到現(xiàn)在,就深切地感受到,那好東西就拿出來(lái)和大家分享一下,下面來(lái)看一下文章的學(xué)習(xí)介紹吧
    2021-12-12

最新評(píng)論