APP下载

.NET平台下角色访问动态权限管理的设计与实现

2017-04-15兰萍

电脑知识与技术 2016年34期
关键词:角色

兰萍

摘要:为了提高Web信息管理系统的灵活性和可维护性,根据RBAC的基本思想, 利用Web 控件TreeView、Menu 及ASP.NET 技术, 通过递归算法,动态生成用户权限树型菜单和下拉菜单的具体实现方法。用户无权限的模块对用户不可见, 提高了系统的安全性。该方法具有一定的通用性,可以很容易扩展到其他Web开发平台上。

关键词:角色;Web service;TreeView控件;Menu控件;递归算法

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)34-0095-03

1序言

在B/S信息管理系统中,实现权限动态分配的方法有多种。从操作对象上看,可以分为两种:以用户为中心的方法和以角色为中心的方法。以用户为中心的方法是对每个用户直接设置权限,而以角色为中心的方法是给每个角色授权,这是一种间接设置权限的方法。这种以角色为中心的方法,是现在使用最多的一种方法,但相对复杂一点。它的基本做法是将系统中的所有用户分成多个不同的角色,属于同一角色的用户具有相同的操作权限。这样,在实现时就可以针对角色设置权限。基于角色的动态权限分配具有很大的灵活性,主要体现在不用修改程序代码就可以实现操作权限的调整,更好地适应了由于业务的调整或变化所带来的操作权限的变化。本文采用了基于角色访问控制(RBAC,Role Based Access Control) 的基本思想, 巧妙地利用了Web控件TreeView 及Menu, 设计了在B/S 模式下,根据不同的用户,不同的角色权限,通过数据库表的设计,动态生成用户权限树型菜单和下拉菜单的具体实现方法。

2角色访问控制(RBAC)的思想

基于角色的访问控制在用户和权限操作之间引入角色(Role)的概念,其目的是为了隔离用户与用户所具有的权限。分配给每个用户一个合适的角色,每个角色都具有其对应的权限。一个角色也可以有多个用户,一个用户可以有多个角色。一个角色可以有多个权限,相同的权限也可以赋予多个角色。角色作为中间桥梁把用户和权限联系起来,一个角色与权限的关联可以看作该角色拥有的一组权限的集合。权限赋予角色,角色分配给用户。RBAC 是实施面向企业的安全策略的一种有效的访问控制方式,其具有灵活性、方便性和安全性的特点,目前在大型数据库系统的权限管理中得到普遍应用。角色访问控制(RBAC)基本模型如图1所示。

3 .NET 架构与Web Service

.NET框架(.NET Framework) 是由微软开发,一个致力于敏捷软件开发(Agile softwaredevelopment)、快速应用开发(Rapidapplication development)、平台无关性和网络透明化的软件开发平台。.NET是微软为下一个十年对服务器和桌面型软件工程迈出的第一步。.NET包含许多有助于互联网和内部网应用迅捷开发的技术。从层次结构来看,.NET框架又包括三个主要组成部分:公共语言运行时(CLR:Common Language Runtime)、服务框架(Services Framework)和上层的两类应用模板——传统的Windows应用程序模板(Win Forms)和基于ASP.NET的面向Web的网络应用程序模板(Web Forms和Web Services)。

Web Service技术是一种应用程序,其作用是向用户提供某些功能,并以受控的方式提供一些服务和数据访问,其开放接口的访问方式,可以在任何支持这些标准的操作系统中使用,从而为跨平台的开发奠定了基础。同时出于安全性的考虑,无论是个人或公司站点,都不可能完全開放的进行信息共享,这个时候,Web Service的出现解决就解决了这个问题。Web Service主要由四部分组成,分别是Web服务,服务的提供方、服务的请求方和服务的注册机构。

4数据库表的设计

数据库表的设计,DBMS采用微软的SQL SERVER 2012,7张表的设计如下。

部门(bm)表的结构如表1所示。

5基于角色的权限动态分配的实现思路及模块划分。

基于角色的权限动态分配的实现思路:

1)根据用户表的编号,从用户角色表中获取用户所属角色;

2)再根据角色编号从角色功能树表和功能树表中获取可以操作的所有资源;

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

权限管理系统分为:”部门管理”、“用户管理”和“角色管理”3个功能模块。

1) 部门管理在:主要分为添加、删除、修改和查询。添加1个部门时,同时添加部门对应的角色(可能多个)。

2) 用户管理:主要分为添加、删除、修改和查询。添加一个用户时,采用用户、部门、角色进行用户角色分配(因为一个员工属于1个部门),即添加1个用户时,同时分配该用户相对应的角色。

3) 角色管理:主要分为添加、删除、修改和查询。在添加角色时同时分配功能树。

6系统中Web Service 的设计应用

动态权限管理系统中大部分的逻辑运算和数据的访问都是在Web Service 中进行的,客户端利用Web Service 的方法对具体功能进行实现。在表8中将列出Web Service 的设计应用。

7具体实现

系统开发平台采用微软Visual studio 2010。开发语言asp.net(c#)。角色添加及分配的功能树的运行主界面如图2所示。其中树型菜单是采用TreeView控件根据数据库表动态进行绑定的。

物资管理部门的普通员工登录系统后根据权限管理系统自动生成的下拉菜单(利用Menu控件)如图3所示。

基于角色的权限分配系统的下拉菜单的生成核心代码如下,用到递归算法。

private void PopulateMenu()

{

DataTable treeViewData = GetTreeViewData();

AddTopMenuItems(treeViewData); //绑定父节点

}

private DataTable GetTreeViewData() //获取数据

{

string selectCommand = "select distinct jsgns.GN_DM,mc,SJGN_M,CD_AN_DM,Sybz='y' from yh,yhjs,jsgns,gns where yh.USER_ID=yhjs.USER_ID and yhjs.JS_DM=jsgns.js_dm and jsgns.GN_DM=gns.GN_DM and yh.USER_ID=" + Session["user_id"] + "";

string conString = ConfigurationManager.ConnectionStrings["default111"].ConnectionString;

SqlDataAdapter dad = new SqlDataAdapter(selectCommand, conString);

DataTable dtblDiscuss = new DataTable();

dad.Fill(dtblDiscuss);

return dtblDiscuss;

}

private void AddTopMenuItems(DataTable treeViewData)// 綁定SJGN_M等于0的结点

{

DataView view = new DataView(treeViewData);

view.RowFilter = "SJGN_M=0";

foreach (DataRowView row in view)

{

MenuItem node = new MenuItem();//以下为设置结点的属性

node.NavigateUrl=row["CD_AN_DM"].ToString();

node.Text = row["mc"].ToString();

node.Value = row["gn_dm"].ToString();

node.Target = "main";

Menu1.Items.Add(node);//添加结点,Menu1为Menu控件的ID属性

AddChildMenuItems(treeViewData, node);//绑定子节点

}

}

private void AddChildMenuItems(DataTable treeViewData, MenuItem parentMenuItems)//绑定子节点

{

DataView view = new DataView(treeViewData);

view.RowFilter = "SJGN_M=" + parentMenuItems.Value;

foreach (DataRowView row in view)

{

MenuItem node = new MenuItem();//以下为设置结点的属性

node.NavigateUrl = row["CD_AN_DM"].ToString();

node.Text = row["mc"].ToString();

node.Value = row["gn_dm"].ToString();

node.Target = "main";

parentMenuItems.ChildItems.Add(node);//添加结点

AddChildMenuItems(treeViewData, node);//递归,绑定子节点

}

}

8结论

.NET平台下角色访问动态权限管理重点依赖于数据库的设计,根据数据库和角色分配权限原理,动态的生成树型和下拉菜单。同时因为数据库的一致性,所以很容易推广到其他的Web平台。该权限分配系统在上海某园林公司得到了具体的应用。

参考文献:

[1] 杜利峰,许淳.基于ASP.NET权限动态分配的设计与实现[J].现代电子技术,2012,35(18):36.

[2] 梁智,沈倩.ASP.NET MVC下基于RBAC权限认证的设计与实现[J].重庆理工大学学报:自然科学,2011,25(9):75.

[3] 王珊,萨师煊.数据库系统概论[M].北京:高等教育出版社,2006.

[4] 詹英,林苏映.数据库技术与应用-SQL Server 2012教程[M].北京:清华大学出版社,2014.

[5] 李增民,苗荣.ASP.NET4.5高级编程[M].北京:高等教育出版社,2014.

[6] 李铭.C#高级编程[M].北京:高等教育出版社,2015.

猜你喜欢

角色
小学语文教师在实施新课程中的角色定位
教师和学生角色的转变是实现有效教学的关键
生态系统理论视角下医院志愿者角色和功能的研究
办公室行政管理工作的“角色”与效率分析
普通高等学校思想政治教育辅导员角色问题研究