利用.NET中的用户控件实现权限控制的基本思想是:根据角色访问控制(RBAC)的基本原理,给用户分配一个角色,每个角色对应一些权限,然后利用ASP.NET中的用户控件(UserControl)来判断该用户对应的角色是否对访问页面有访问的权力。
下面将从数据库设计、添加角色和用户控件的使用等三方面来阐述具体ASP.NET系统用户权限实现过程。
1、数据库中表的设计
首先,在数据库中设计功能模块表、功能表和角色表等三个表。
(1) 功能模块表
为了管理好用户的权限,首先要组织好系统的模块,为此设计了一个功能模块表。见表1。
(2) 功能表
每个功能模块所具有的子功能称为功能,如商品管理模块goods(属于功能模块的范畴)包含商品信息查询、商品信息更新、商品信息删除、商品定价信息查询以及商品定价信息更新五种功能,功能表的设计见表2。
上面提到的例子可以作为这样几条记录分别插入功能模块表和功能表。
insert into TModule values(0,'商品管理模块','goods',5);
insert into Tfunction values(0,'商品信息查询','selectgoods',0);
insert into Tfunction values(1,'商品信息更新','updategoods',0);
insert into Tfunction values(2,'商品信息删除','deletegoods',0);
insert into Tfunction values(3,'商品定价信息查询','selectgoodsprice',0);
insert into Tfunction values(4,'商品定价信息更新','updategoodsprice',0);
(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) 注册
- 〈%@RegisterTagPrefix="Acme"TagName="Head"
-
Src="../UserControl/headinner.ascx"%〉
(2) 声明
经过实践,在.aspx文件中声明.ascx文件可分为几种情况:
- 第一种情况:〈Acme:Headrunat="server"/〉
-
第二种情况:〈Acme:Headrunat="server"
- flag=0funcname1=selectgoodsfuncname2=updategoods/〉
-
第三种情况:〈Acme:Headrunat="server"flag=1
- funcname1=selectgoodsfuncname2=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文件中(这件事作者本来就是要做的),那么在编程的时候就不必考虑复杂的权限问题了。
结束语
本文在开发一个电子商务系统的实践中发现,公司对ASP.NET系统用户权限非常重视。因此,设计一个简单方便又行之有效的权限控制机制对于电子商务系统是必不可少的。本文所提出的基于ASP.NET的电子商务系统用户权限设计和实现方法已经在实际的工作中得到了验证,修改指定权限组的操作变得非常方便。
分享到:
相关推荐
ASP.NET系统用户权限设计与实现 针对一切用户权限设置的操作与制作步骤
ASP.NET系统用户权限设计与实现.通用型比较好。易于移植.
ASP.net 用户分组权限管理系统 ASP.net 用户分组权限管理系统,RedGlovePermission v2.0,从开发到至今得到很多朋友关注,这也是其不断丰富完善的动力,本次重点更新了一些重要的功能,去掉了一些华而不实的功能。
Asp.net中的用户角色权限设计Asp.net中的用户角色权限设计
4、该权限系统精确控制到每一条命令,并且采用缓存机制减少多余的数据库权限验证操作。 三、初次运行说明 在文件夹里有说明文档。 四、注意事项 1、同一个账号同时多个浏览器(包括手机浏览器)登陆,后者挤掉...
asp.net 权限管理asp.net 权限管理asp.net 权限管理asp.net 权限管理asp.net 权限管理asp.net 权限管理
ASP.NET源码——asp.net权限管理系统Demo源码.zip
ASP.NET+MVC+创建用户权限管理范例程序源码
ASP.NET2.0实现的通用权限管理系统,已调试可运行。
Asp.net通用OA系统
ASP.NET权限管理系统(FrameWork) 1.0.6 Release和ASP.NET权限管理系统(FrameWork) 1.0.7 Release
asp.net通用权限系统 版本2012-9-22日 开发工具: sql2005+vs2008 数据库文件和建模文件都在里面(ProjectDB,MyProject) 建模文件是用的PowerDesigner 12.5 1.可插拔的权限系统,权限控制粒度可精确页面和按钮,任何...
ASP.NET 商用破解 权限管理系统 企业源代码 商用破解 反编译后 再设计出来的
平台:VS2010+,Sql Server, ASP.NET 配置更改:更改BPMS.WEB\XmlConfig\Config.xml下的数据库连接字符串 启动:VS IIS Express或建立IIS对应网站(主网站项目BPMS.WEB) 登录: 用户名/密码:admin/0000 用户名/...
通用数据访问层针对sql server 2005及以上版本的实现 Lm.Common.Excel Excel2003的读取与生成 Lm.Common.Excel.OpenXml Excel2007、2010的读取和生成 Lm.Common.ExtensionMethods 一些使编码更加方便的扩展方法 ...
ASP.NET权限管理系统源码 由于每次开发新项目都需要一个权限管理系统,为了解决重复开发让成本增加的问题,我们特此开发一套权限管理系统,方便大家在此基础上开发出更多更优秀的软件产品。 功能介绍:基础设置--...
员工管理:员工是系统操作者,该功能主要完成系统用户配置 部门管理:配置系统组织机构(公司、部门) 职位管理:配置系统用户所担任职务 角色管理:角色菜单权限分配,角色对应权限,员工属于某个角色 菜单...
系统管理包括:用户列表,用户添加,类别管理,模块管理,部门列表,部门添加,职位列表,职位添加,模块排序,角色权限管理,角色列表,角色添加,用户角色列表,采用框架设计,工具为visual studio .net 2008 ...
权限管理系统_ASP.NET (多语言、多皮肤、多角色 角色权限、用户权限、分组权限、用户多角色)