本文将首先介绍ASP.NET的基本情况和RBAC(Role Based Access Control)的基本思想,在此基础上,给出电子商务系统中实现用户权限控制的一种具体方法。
ASP.NET概述
ASP.NET是微软流行的动态WEB编程技术活动服务器网页(ASP)的最新版本,但它远不是传统ASP简单升级。ASP.NET和ASP的最大区别在于编程思维的转换,ASP.NET是真正的面向对象(Object-oriented),而不仅仅在于功能的增强。
在ASP.NET中,Web 窗体页由两部分组成:视觉元素(HTML、服务器控件和静态文本)和该页的编程逻辑。其中每一部分都存储在一个单独的文件中。可视元素在一个扩展名为 .aspx 文件中创建,而代码位于一个单独的类文件中,该文件称作代码隐藏类文件扩展名为.aspx.vb 或 .aspx.cs。这样,.aspx文件中存放所有要显示的元素,aspx.vb或.aspx.cs文件中存放逻辑。
RBAC的基本思想
RBAC(角色访问控制)的基本思想可简单地用图1来表示,即把整个访问控制过程分成两步:访问权限与角色相关联,角色再与用户关联,从而实现了用户与访问权限的逻辑分离。
由于RBAC实现了用户与访问权限的逻辑分离,因此它极大的方便了权限管理。例如,如果一个用户的职位发生变化,只要将用户当前的角色去掉,加入代表新职务或新任务的角色即可,角色/权限之间的变化比角色/用户关系之间的变化相对要慢得多,并且委派用户到角色不需要很多技术,可以由行政管理人员来执行,而配置权限到角色的工作比较复杂,需要一定的技术,可以由专门的技术人员来承担,但是不给他们委派用户的权限,这与现实中情况正好一致。
用户权限在.NET中的设计与实现
利用.NET中的用户控件实现权限控制的基本思想是:根据角色访问控制(RBAC)的基本原理,给用户分配一个角色,每个角色对应不同模块的不同权限,同一个用户可属于不同的角色,对模块的操作权限取用户所属几个角色的最高权限,可以新建一个页面基类,只要让要进行权限判断的页面继承当前基类。在页面基类中加入权限判断,如果当前登陆用户具有在当前模块的所要进行的操作的权限,则继续,否则给出无权限提示,并返回。
下面将从数据库设计、添加角色和基类的实现等三方面来阐述具体实现过程。
1、数据库中表的设计
首先,在数据库中设计功能模块表、功能表和角色表等三个表。
(1) 功能模块表
为了管理好用户的权限,首先要组织好系统的模块,为此设计了一个功能模块表。见表1。
(1)模块表:(sysFuncDic)
FuncID:模块编号,自动增加。
FuncName:模块名称。Description::描述
(2) 用户角色表:(sysEmpRoles)
PKID:自编号,主键
EmpID:用户编号,外键
RoleID:角色编号,外键
(3)角色表(sysRolesDic)
RoleID:角色编号,自增字段,主键
RoleName:角色名称
Description:角色描述
(4)角色权限表(sysFuncRights)
PKID: 编号,自增字段
FuncID:模块号,外键
RoleID:角色号,外键
RightFlag:权限级别
权限可分为:浏览(0),查询(1),添加(2),修改(3),删除(4)
如图:
2、角色的添加,如图所示:
再添加角色的对应的模块和权限信息,如图:
如果角色具有后面的权限,则前面的功能权限也自动获的,比如: 如果当前角色拥有了模块管理的删除权限,则浏览,查询,添加,修改权限也同时具有。分别用0-4的数字表示,4为最高权限。
用户添加到角色中,如图所示:
3.基类的实现
(1)进入时的权限验证:在基类中实现根据模块名称和登陆用户的编号查询权限信息,如果有权限信息,则将权限代码保存在基类变量中,并进入页面,如果当前没有当前模块的浏览权限,则给出无操作权限的信息,并返回。
(2) 在当前页面进行操作时则根据上一步验证时获取的权限信息,判断用户是否有所要进行操作的权限,有则执行操作,没有给出无权限信息,并返回。