.NET之后台用户权限管理实现

序:在功能性比较强大的后台管理网站处于各种角度考虑多有应用权限管理功能。以公司内部管理系统为例,管理员根据不同员工所在不同部门赋予其不同权限,或者根据上下级隶属关系实现“金字塔”管理。本文内容有不尽不实之处恳请指正。

正文:
如下效果图是否令某用户具备相应权限用checkbox状态区别存储。

(一)储存
这里的权限功能(类别)名称和权限模块(具体)名称均是手动输入数据库,不可增删改查。本例将某权限模块作为最基本元素,是否具备该权限用1或0表示,进而将当前用户所有权限链接组成二进制字符串储存在数据库中。如示例代码1.1

(二)读取 如示例代码1.2

(三)前台代码 如下

代码如下:

//利用js添加逗号和竖线 ,通过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>

代码如下:

示例代码1.2
 /// <summary>
         /// 绑定所有模块分类
         /// </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>
         /// 绑定每个模块中的各个功能选项
         /// </summary>
         /// <param name="moduleidstr">模块数</param>
         /// <param name="sb">html表格</param>
         /// <param name="RoleActions">权限二进制字符串</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(',');//用逗号间隔功能模块数
             string[] str = moduleidstr.Split(',');//移除逗号,以数组形式保存
             for (int i = 0; i < str.Length; i++)//循环数组
             {
                 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 + "  ");
                         }
                         else
                         {
                             //修改
                             if (RoleActions.Length >= list[j].FuncNo)
                             {
                                 //FuncNO代表当前权限位于二进制字符索引值
                                 if (RoleActions.Substring(list[j].FuncNo - 1, 1) == "1")//截取权限二进制字符串并判断其状态
                                 {
                                     //选中状态
                                     funsb.Append("<input id=\"" + list[j].FuncNo.ToString() + "\" type=\"checkbox\" checked=\"checked\" value=\"" + list[j].FuncNo.ToString() + "\" />");
                                     funsb.Append(list[j].FuncName + "  ");
                                 }
                                 else
                                 {
                                     //非选中状态
                                     funsb.Append("<input id=\"" + list[j].FuncNo.ToString() + "\" type=\"checkbox\" value=\"" + list[j].FuncNo.ToString() + "\" />");
                                     funsb.Append(list[j].FuncName + "  ");
                                 }
                             }
                             else
                             {
                                 funsb.Append("<input id=\"" + list[j].FuncNo.ToString() + "\" type=\"checkbox\" value=\"" + list[j].FuncNo.ToString() + "\" />");
                                 funsb.Append(list[j].FuncName + "  ");
                             }
                         }
                     }
                 }
                 //替换功能项
                 sb.Replace("{" + str[i] + "}", funsb.ToString());
             }
             LiteralRole.Text = sb.ToString();     
         }

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

........

}

代码如下:

示例代码1.1
 /// <summary>
         /// 生成角色二进制字符串
         /// </summary>
         /// <param name="str"></param>
         /// <returns>二进制序列</returns>
         private string GenerateRoleAction(string str)
         {
            //虚拟表构建两列存储权限序列号及其状态
             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('|');//截取任意两个二进制元素之间竖线
             for (int i = 0; i < strarray.Length; i++)
             {
                 DataRow dr = dt.NewRow();
                 dr[0] = strarray[i].Split(',')[0];//权限序列号
                 dr[1] = strarray[i].Split(',')[1];//权限状态,用true和false区别记录
                 dt.Rows.Add(dr);
             }

dt.DefaultView.Sort = "funno asc";
             DataTable dttemp = dt.DefaultView.ToTable();
             //将状态列转换为二进制字符
             string s = "";
             for (int j = 0; j < dttemp.Rows.Count; j++)
             {
                 if (dttemp.Rows[j]["flag"].ToString().ToLower() == "true")
                 {
                     s += "1";//选中状态(true,即具备该权限)用1表示
                 }
                 else
                 {
                     s += "0";//非选中状态(false,即不具备该权限)用0表示
                 }
             }
             return s;//返回象征权限的二进制字符串
         }

(0)

相关推荐

  • .NET之后台用户权限管理实现

    序:在功能性比较强大的后台管理网站处于各种角度考虑多有应用权限管理功能.以公司内部管理系统为例,管理员根据不同员工所在不同部门赋予其不同权限,或者根据上下级隶属关系实现"金字塔"管理.本文内容有不尽不实之处恳请指正. 正文:如下效果图是否令某用户具备相应权限用checkbox状态区别存储. (一)储存这里的权限功能(类别)名称和权限模块(具体)名称均是手动输入数据库,不可增删改查.本例将某权限模块作为最基本元素,是否具备该权限用1或0表示,进而将当前用户所有权限链接组成二进制字符串储存

  • java web实现用户权限管理

    最近在做一个网站类型项目,主要负责后台,ui框架选型为jquery easy ui,项目架构为spring mvc + spring jdbc,简单易用好上手!搭建好框架后开始了第一个任务,设计并实现一套简单的权限管理功能. 一套最基本的权限管理包括用户.角色.资源. 实现效果: 数据库设计,设计如下: 用户:user 角色:role 用户-角色:user_role 资源:resource(包括上级菜单.子菜单.按钮等资源) 角色-资源:role_resource 标准的权限管理系统设计为以上5

  • MySQL用户权限管理详解

    用户权限管理主要有以下作用: 1. 可以限制用户访问哪些库.哪些表 2. 可以限制用户对哪些表执行SELECT.CREATE.DELETE.DELETE.ALTER等操作 3. 可以限制用户登录的IP或域名 4. 可以限制用户自己的权限是否可以授权给别的用户 一.用户授权 复制代码 代码如下: mysql> grant all privileges on *.* to 'yangxin'@'%' identified by 'yangxin123456' with grant option;  

  • mongodb基础之用户权限管理实例教程

    前言 本文主要介绍了mongodb用户权限管理的相关内容,关于接着上次实践的部分,下面话不多说了,来一起看看详细的介绍吧 启动mongodb并连接 ./bin/mongod -f conf/mongod.conf ./bin/mongo 127.0.0.1:12345 查看默认的数据库情况 > show dbs admin 0.000GB local 0.000GB > use admin switched to db admin > show tables system.version

  • mysql用户权限管理实例分析

    本文实例讲述了mysql用户权限管理.分享给大家供大家参考,具体如下: 本文内容: 什么是用户权限 恰当的用户权限 查看权限 修改权限 删除权限 首发日期:2018-04-19 什么是用户权限: 每个用户都有自己的用户权限,这些用户权限比如有查询表权限.修改表权限.插入表权限.新增用户权限等等. 具体的权限: 恰当的用户权限: 多数用户只需要对表进行读和写,但少数用户甚至需要能创建和删除表: 某些用户需要读表,但可能不需要更新表: 对于大多数用户,应该只提供对表的读写,不应该允许他们创建表.修改

  • 详解MySQL 用户权限管理

    前言: 不清楚各位同学对数据库用户权限管理是否了解,作为一名 DBA ,用户权限管理是绕不开的一项工作内容.特别是生产库,数据库用户权限更应该规范管理.本篇文章将会介绍下 MySQL 用户权限管理相关内容. 1.用户权限简介 当我们创建过数据库用户后,还不能执行任何操作,需要为该用户分配适当的访问权限. 关于 MySQL 用户权限简单的理解就是数据库只允许用户做你权利以内的事情,不可以越界.比如只允许你执行 select 操作,那么你就不能执行 update 操作.只允许你从某个 IP 上连接

  • Mysql 用户权限管理实现

    1. MySQL 权限介绍 mysql中存在4个控制权限的表,分别为user表,db表,tables_priv表,columns_priv表,我当前的版本mysql 5.7.22 . mysql权限表的验证过程为: 先从user表中的Host,User,Password这3个字段中判断连接的ip.用户名.密码是否存在,存在则通过验证. 通过身份认证后,进行权限分配,按照user,db,tables_priv,columns_priv的顺序进行验证.即先检查全局权限表user,如果user中对应的

  • SpringBoot整合Shiro框架,实现用户权限管理

    一.Shiro简介 核心角色 1)Subject:认证主体 代表当前系统的使用者,就是用户,在Shiro的认证中,认证主体通常就是userName和passWord,或者其他用户相关的唯一标识. 2)SecurityManager:安全管理器 Shiro架构中最核心的组件,通过它可以协调其他组件完成用户认证和授权.实际上,SecurityManager就是Shiro框架的控制器. 3)Realm:域对象 定义了访问数据的方式,用来连接不同的数据源,如:关系数据库,配置文件等等. 核心理念 Shi

  • MySQL数据库用户权限管理

    目录 1.用户管理 1.1.创建用户 1.2.删除用户 1.3.修改用户密码 2.权限管理 2.1.授予权限 grant 2.2.取消权限 revoke 2.3.刷新权限 flush 3.密码丢失的解决方案 1.用户管理 mysql的用户信息保存在了mysql.user中: select * from mysql.user\G *************************** 5. row *************************** Host: localhost User:

  • nodejs acl的用户权限管理详解

    说明 Q: 这个工具用来做什么的呢 A: 用户有不同的权限,比如管理员,vip,普通用户,每个用户对应访问api,页面都不一样 nodejs有两个比较有名的权限管理模块 一个是acl 一个是rbac 综合对比了一下最终在做项目的时候选择了acl 功能列表: addUserRoles //给某用户添加角色 removeUserRoles //移除某用户角色 userRoles //获取某用户所有角色 roleUsers //获取所有是此角色的用户 hasRole // 某用户是否是某角色 addR

随机推荐