转载:ACL权限控制
2008-04-30 14:32
281 查看
1、数据库中表的设计 首先,在数据库中设计功能模块表、功能表和角色表等三个表。
(1) 功能模块表
为了管理好用户的权限,首先要组织好系统的模块,为此设计了一个功能模块表。见表1。
(2) 功能表
每个功能模块所具有的子功能称为功能,如商品管理模块goods(属于功能模块的范畴)包含商品信息查询、商品信息更新、商品信息删除、商品定价信息查询以及商品定价信息更新五种功能,功能表的设计见表2。
上面提到的例子可以作为这样几条记录分别插入功能模块表和功能表。
(3) 角色表
角色表的设计关键在于角色值的定义,它是一个由0和1组成的类似二进制数的字符串。而功能表中的funcNo
(功能编号)字段表示该功能在角色表的roleValue
(角色值)字段中的位置,如果该位置对应的数值是0,表示该角色无此权限,如果值为1,则表示该角色拥有此权限。如角色普通会员的角色值为100100…
00(共100位),如上所示,商品信息查询的功能编号为0,角色值100100…00的第0位为1,所以该普通会员角色拥有商品信息查询的功能;相反,
该角色值的第1位为0,而功能编号为1 的功能为商品信息更新,所以该普通会员角色没有商品信息更新的权限。它们的关系可由图2来表示。
2、角色的添加
有了上面几个表,角色页面的功能模块以及其对应的功能都可以从功能模块表和功能表中读出,如图3所示。
在将新角色普通会员插入数据库时,先将角色值的所有位都置为0,然后利用.NET Framework 类库中的Replace函数将角色值中的打上勾的功能相应的功能编号位的值改为1。
例如,新添加一个角色名为普通会员的角色,它拥有的功能为商品信息查询(功能编号0)和商品定价信息查询(功能编号3)两项,则角色值应为1001000……00(100位),即角色值中第0位和第3位的值为1,其余为0。
3、利用用户控件实现访问权限
在定义好用户控件.ascx文件(head.ascx)及.ascx.cs(head.ascx,cs)文件时,接下去只要在.aspx文件中注册和声明它就可以了。
(1) 注册
<%@ Register TagPrefix="Acme" TagName="Head" Src="../UserControl/headinner.ascx" %>
(2) 声明
经过实践,在.aspx文件中声明.ascx文件可分为几种情况:
第一种情况:<Acme:Head runat="server" />
第二种情况:<Acme:Head runat="server" flag=0 funcname1=selectgoods funcname2=updategoods />
第三种情况:<Acme: Head runat="server" flag=1 funcname1= selectgoods funcname2=updategoods />
字段flag是用来控制怎样进行权限检查的标志,funcname指功能表中的功能英文名。如果flag为空,则不执行权限检查(第一种情况);否则如
果flag=="0",则表示同时具有selectgoods(商品信息查询)和
updategoods(商品信息更新)这两种权限的角色所对应的用户才有权利查看该页(第二种情况);否则,如果flag=="1",则认为,具有
selectgoods(商品信息查询)或 updategoods(商品信息更新)这两种权限中任意一种权限的用户就有权利查看该页(第三种情况)。
上面进行权限检查的过程全部由用户控件来实现,其全部方法都封装在.ascx.cs文件中,其中最主要的一个方法是检查某一角色是否拥有某一确定权限的
checkAuth(string roleId,string funcEName)方法。这个方法的思想如图4所示。
图4中roleValue(角色值)的第0位(selectgoods的功能编号)值为1,表示该角色拥有selectgoods(商品信息查询)的权
限。这样,我们把对权限检查的所有逻辑都封装在了用户控件中,因此,对WEB窗体页.aspx文件而言,只需在导入.ascx文件时确定用户在访问该页面
时所应拥有的权限,而不需对aspx.cs进行任何改动。
由上所述,可以很清楚地看出,只要在用户控件中对用户权限进行控制,再把它包括在.aspx文件中(这件事作者本来就是要做的),那么在编程的时候就不必考虑复杂的权限问题了。
(1) 功能模块表
为了管理好用户的权限,首先要组织好系统的模块,为此设计了一个功能模块表。见表1。
(2) 功能表
每个功能模块所具有的子功能称为功能,如商品管理模块goods(属于功能模块的范畴)包含商品信息查询、商品信息更新、商品信息删除、商品定价信息查询以及商品定价信息更新五种功能,功能表的设计见表2。
上面提到的例子可以作为这样几条记录分别插入功能模块表和功能表。
(3) 角色表
角色表的设计关键在于角色值的定义,它是一个由0和1组成的类似二进制数的字符串。而功能表中的funcNo
(功能编号)字段表示该功能在角色表的roleValue
(角色值)字段中的位置,如果该位置对应的数值是0,表示该角色无此权限,如果值为1,则表示该角色拥有此权限。如角色普通会员的角色值为100100…
00(共100位),如上所示,商品信息查询的功能编号为0,角色值100100…00的第0位为1,所以该普通会员角色拥有商品信息查询的功能;相反,
该角色值的第1位为0,而功能编号为1 的功能为商品信息更新,所以该普通会员角色没有商品信息更新的权限。它们的关系可由图2来表示。
2、角色的添加
有了上面几个表,角色页面的功能模块以及其对应的功能都可以从功能模块表和功能表中读出,如图3所示。
在将新角色普通会员插入数据库时,先将角色值的所有位都置为0,然后利用.NET Framework 类库中的Replace函数将角色值中的打上勾的功能相应的功能编号位的值改为1。
例如,新添加一个角色名为普通会员的角色,它拥有的功能为商品信息查询(功能编号0)和商品定价信息查询(功能编号3)两项,则角色值应为1001000……00(100位),即角色值中第0位和第3位的值为1,其余为0。
3、利用用户控件实现访问权限
在定义好用户控件.ascx文件(head.ascx)及.ascx.cs(head.ascx,cs)文件时,接下去只要在.aspx文件中注册和声明它就可以了。
(1) 注册
<%@ Register TagPrefix="Acme" TagName="Head" Src="../UserControl/headinner.ascx" %>
(2) 声明
经过实践,在.aspx文件中声明.ascx文件可分为几种情况:
第一种情况:<Acme:Head runat="server" />
第二种情况:<Acme:Head runat="server" flag=0 funcname1=selectgoods funcname2=updategoods />
第三种情况:<Acme: Head runat="server" flag=1 funcname1= selectgoods funcname2=updategoods />
字段flag是用来控制怎样进行权限检查的标志,funcname指功能表中的功能英文名。如果flag为空,则不执行权限检查(第一种情况);否则如
果flag=="0",则表示同时具有selectgoods(商品信息查询)和
updategoods(商品信息更新)这两种权限的角色所对应的用户才有权利查看该页(第二种情况);否则,如果flag=="1",则认为,具有
selectgoods(商品信息查询)或 updategoods(商品信息更新)这两种权限中任意一种权限的用户就有权利查看该页(第三种情况)。
上面进行权限检查的过程全部由用户控件来实现,其全部方法都封装在.ascx.cs文件中,其中最主要的一个方法是检查某一角色是否拥有某一确定权限的
checkAuth(string roleId,string funcEName)方法。这个方法的思想如图4所示。
图4中roleValue(角色值)的第0位(selectgoods的功能编号)值为1,表示该角色拥有selectgoods(商品信息查询)的权
限。这样,我们把对权限检查的所有逻辑都封装在了用户控件中,因此,对WEB窗体页.aspx文件而言,只需在导入.ascx文件时确定用户在访问该页面
时所应拥有的权限,而不需对aspx.cs进行任何改动。
由上所述,可以很清楚地看出,只要在用户控件中对用户权限进行控制,再把它包括在.aspx文件中(这件事作者本来就是要做的),那么在编程的时候就不必考虑复杂的权限问题了。
相关文章推荐
- cvsacl 控制cvs的用户权限 推荐
- 分离权限管理与访问控制(转载)
- centos 的权限管理--自主访问控制DAC和访问控制列表 ACL
- LINUX 额外权限控制 ACL
- Linux高级权限ACL权限控制基础知识
- 添加伪静态功能后,acl权限控制失效问题
- ceph存储 网络层访问权限控制技术-acl(访问控制列表)
- kafka权限控制-Acl
- (证实可用)C#设置与获取目录权限(.net控制ACL)
- Linux学习记录--ACL权限控制
- ZooKeeper通过Auth和ACL完成节点的权限控制。
- 网络层访问权限控制技术-ACL详解(转)
- Zookeeper(四)Acl权限控制
- 关于权限控制(转载)
- linux系统对访问控制(ACL)权限的实现
- 使用Zend_Auth和Zend_Acl进行登录认证及根据用户角色进行权限控制
- asp.net 2.0 权限树的控制(多处转载)
- Linux系统配置 Linux访问控制列表(ACL)的权限控制方法
- 【转载】【权限控制】角色访问动态生成用户权限菜单树
- [转载]x86 控制转移权限检查精要