角色访问动态生成用户权限菜单树

角色访问动态生成用户权限菜单树;一、引言;随着.NET和J2EE开发平台的推出,传统的软件;本文将先介绍RBAC的基本思想,在此基础上,给出;图1RBAC的基本思想;在RBAC中,许可Permissions(特权);RBAC对访问权限的授权由系统管理员统一管理,系;由于RBAC实现了用户与访问权限的逻辑分离,因此;三、用户权限菜单树;用TreeView控件动

角色访问动态生成用户权限菜单树

一、引言

随着.NET和J2EE开发平台的推出,传统的软件开发模式开始向B/S模式转变,这种转变给系统的安全性提出了更高的要求,B/S模式下,由于HTTP协议和浏览器的特殊性,可能会造成信息的泄漏甚至使非法用户修改数据。而权限的设置、分配与管理是任何一个系统必不可少的功能。如何设计与实现其功能,目前有多种方案,传统的访问控制方法DAC(Discretionary Access Control,自主访问控制模型)、MAC(Mandatory Access Control,强制访问控制模型)难以满足复杂的企业环境需求。本文采用了现在流行的基于角色访问控制(RBAC,Role Based Access Control)的基本思想,巧妙地利用了Web控件TreeView及ASP.NET技术,设计了在B/S模式下,根据不同的用户,不同的角色权限,动态生成用户菜单树的一种具体实现方法。

本文将先介绍RBAC的基本思想,在此基础上,给出在ASP.NET中的具体实现方法。 二、角色访问控制(RBAC)的基本思想

图1 RBAC的基本思想

在RBAC中,许可Permissions(特权)就是允许对一个或多个客体执行的权力,角色就是许可的集合,如图1所示。RBAC的基本思想就是把整个访问过程分为两步:访问权限与角色关联,角色再与用户关联,从而实现了用户与访问权限的逻辑分离。

RBAC对访问权限的授权由系统管理员统一管理,系统管理员根据单位中不同的岗位定义不同的角色,用户根据其职能和责任被赋予相应的角色。一旦用户成为某角色的成员,则此用户可以完成该角色所具有的职能。

由于RBAC实现了用户与访问权限的逻辑分离,因此它极大地方便了权限管理的复杂性。可根据用户的实际工作岗位将用户与角色关联,一方面定义角色、增加删除角色中的用户易于操作,另一方面,可以通过更改角色的权限实现大批量用户权限的更新。在实际应用中,由于角色/权限之间的变化比用户/角色之间的变化要慢得多,当一个用户的职位发生了变化,只要将用户当前的角色去掉,加入代表新职务的角色即可。因此,RBAC的优点是明显的,更符合企业的应用特征。

三、用户权限菜单树

用TreeView控件动态实现用户权限菜单树的基本思想是:根据角色访问控制(RBAC)的基本原理,给用户分配不同的角色,每个角色对应一些权限,然后根据用户ID获取用户对应的角色集合,由角色集合获取对应的权限集合,再由权限集合利用TreeWiew控件动态生成一棵由该用户对应的角色能访问的页面(模块)组成的权限树。这样,用户无权访问的页面在权限菜单树就不会出现,不同的用户进入的界面不同,实现了用户权限的统一管理。

下面从功能模块设计、数据库设计、架构设计等几方面来阐述其实现过程。 1.功能模块划分

用户权限管理系统功能如图2所示,其中主要模块功能阐述如下:

用户管理模块分为:删除用户、浏览用户和角色分配三个子模块,主要负责各类用户的删除、合法性验证及为用户分配角色。用户管理模块中并没有增加用户子模块的功能,主要是由用户注册模块来实现的。

权限管理模块分为:角色管理和访问控制两个子模块。角色管理负责管理各类角色(增、删、改),为角色授予相应信息服务模块的使用权限,删除角色的某个模块的使用权限等;访问控制是保证信息安全

的关键,用户登录时经身份验证后,系统根据用户具有角色的信息服务模块的使用权限自动生成访问权限集,使得用户能够访问授权的信息,拦截对没有授权信息服务的访问。

图2 用户权限管理功能模块图

2.数据库设计

在实施RBAC生成用户权限菜单树时,为了提高系统管理及数据访问的效率,在数据库中设计了用户表(表1所示)、角色表(表2所示)、用户角色表(表3所示)、角色权限表(表4所示)及菜单树结构表(表5所示)共5个表。

表1 用户信息表Users

表2 角色信息表Roles

表3 用户角色表UserRoles

表4 角色权限表RolePermissions

表5 菜单树结构表Tree

Web程序中,将系统功能模块组织成树型结构,每个模块对应一个菜单,菜单之间的父子关系直接反映了模块之间的父子关系,在数据库中用一张表Tree来存储这种结构。5个表的关系如图3所示。

图3 5个表之间的关系图

3.系统架构设计

B/S模式下,采用三层结构:表示层、逻辑层及数据层。为了编程方便,把数据层分为实体层和数据访问层,把打开、关闭数据库及调用存储过程的代码全部封将在数据访问类SQLHelper.cs中。实际应用中采用的是四层结构,系统架构设计如图4所示。

为了提高程序的执行效率,所有的数据操作都是通过类SQLHelper.cs调用存储过程来实现的。 实体层的几个主要类及关键方法如下: (1)用户类User:

GetUserLogin(stringsUserName,string sPassword):用户登录验证。 GetRoleByUser(int nUserID):由用户ID返回该用户所有的角色集。 AddUserRole(int nUserID,int nRoleID):为用户分配角色。 GetUserPermissionList( int userID ):得到用户的所有权限集。 (2)角色类RoleEntity:

AddRoleModule(intnTreeID,int nRoleID):为角色分配权限。 DeleteRoleModule(int nRoleID):删除角色拥有的权限。

GetModuleByRole(intnRoleID):由角色ID得到该角色的权限集。

图4 用户权限管理架构图

注:图4中的箭头为调用关系。

(3)权限树类Tree:

BindTree(TreeViewtreeView,int userID):生成树目录。

CreateChildNode(TreeNodeparentnode,DataTable dataTable):递归函数生成树结点。 GetTreesByUserID(int nUserID):由用户ID得到用户权限集动态生成用户权限树。(4)用户权限检查类CkeckAuthority:

ChkPermission(int userID ):检查用户是否有访问权限。 IsInRole(int roleID):检查角色是否存在。 4.具体实现

在树型结构中,给角色授权时采取简单方式,每次授权时,将其对应的RoleID、TreeID及ParentID存入RolePermissions表中,见图5。

图5 角色授权

要实现动态生成用户菜单树,在ASP.NET开发环境中必须安装微软的IE Web控件(可到微软的网站免费下载),安装完成后,在开发环境中引用Microsoft.Web.UI.WebControls.dll,这样在开发环境的工具箱中将会出现MutiPage、TabStrip、Toobar和TreeView等IE Web控件。

将IE Web控件TreeView添加到Web页分以下两步:(1)在页面顶端添加以下@Register指令:

<%@RegisterTagPrefix=”iewc”

Namespace=” Microsoft.Web.UI.WebControls” Assembly=” Microsoft.Web.UI.WebControls” %>

(2)在Web页中需显示TreeView的位置添加以下Web控件语法:

<iewc:TreeViewrunat=”server” …> …

</iewc:TreeView>

关于TreeView控件的用法,读者可参看相应的书籍。

总体架构页面包括用户登录(Longin.aspx)和主界面(Default.aspx)两个部分。

主界面分为三个部分:上部分为标题条(Head.aspx),左部分为菜单目录树(LeftTree.aspx),右部分主框架(MainFram.aspx)。其中LeftTree.aspx页面含TreeView控件,用户单击树中的菜单结点就可打开相应的操作页面。

用户登录采用窗体式验证,负责提供用户的身份验证。然后根据用户在系统中所扮演的角色,取出该用户对应的权限集,动态生成该用户对应本系统的操作权限树(见图6)。

图6 用户访问权限示意图

登录体Login.aspx中的主要代码如下:

privatevoid LoginBtn_Click(object sender, System.EventArgs e) {

if(Page.IsValid== true) {

Entity.Useruser=new User(); string userId = "";

stringisValid=""; //用户的合法标志 //用户身份鉴别

SqlDataReaderrecs = user.GetUserLogin(UserName.Text.Trim(),

Entity.User.Encrypt(Password.Text.Trim()));

if(recs.Read()){

userId =recs["UserID"].ToString();

//取到用户的合法标志isValid=recs["State"].ToString(); }

recs.Close();

if(isValid=="0")//用户没有被系统管理同确定,转向访问拒绝面{ Response.Redirect("AccessDenied.aspx"); } if((userId != null)&& (userId != "")) {

Session["UserID"]=userId;

Entity.CkeckAuthoritychkau=new CkeckAuthority();

//用户访问权限检验

if(!chkau.ChkPermission(Int32.Parse(Session["UserID"].ToString()))){

// 如无权限直接转向访问拒绝面Response.Redirect("AccessDenied.aspx"); } else {

//用户有访问权限,创建用户名,密码验证的票据

FormsAuthenticationTicketticket =new FormsAuthenticationTicket(

1, //version 版本

UserName.Text.Trim(),// 用户cookie名

原:

http://3y.uu456.com/bp_1id2e5fwaa1wxgv8jpqd_1.html

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值