蘭萍
摘要:為了提高Web信息管理系統的靈活性和可維護性,根據RBAC的基本思想, 利用Web 控件TreeView、Menu 及ASP.NET 技術, 通過遞歸算法,動態(tài)生成用戶權限樹型菜單和下拉菜單的具體實現方法。用戶無權限的模塊對用戶不可見, 提高了系統的安全性。該方法具有一定的通用性,可以很容易擴展到其他Web開發(fā)平臺上。
關鍵詞:角色;Web service;TreeView控件;Menu控件;遞歸算法
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2016)34-0095-03
1序言
在B/S信息管理系統中,實現權限動態(tài)分配的方法有多種。從操作對象上看,可以分為兩種:以用戶為中心的方法和以角色為中心的方法。以用戶為中心的方法是對每個用戶直接設置權限,而以角色為中心的方法是給每個角色授權,這是一種間接設置權限的方法。這種以角色為中心的方法,是現在使用最多的一種方法,但相對復雜一點。它的基本做法是將系統中的所有用戶分成多個不同的角色,屬于同一角色的用戶具有相同的操作權限。這樣,在實現時就可以針對角色設置權限。基于角色的動態(tài)權限分配具有很大的靈活性,主要體現在不用修改程序代碼就可以實現操作權限的調整,更好地適應了由于業(yè)務的調整或變化所帶來的操作權限的變化。本文采用了基于角色訪問控制(RBAC,Role Based Access Control) 的基本思想, 巧妙地利用了Web控件TreeView 及Menu, 設計了在B/S 模式下,根據不同的用戶,不同的角色權限,通過數據庫表的設計,動態(tài)生成用戶權限樹型菜單和下拉菜單的具體實現方法。
2角色訪問控制(RBAC)的思想
基于角色的訪問控制在用戶和權限操作之間引入角色(Role)的概念,其目的是為了隔離用戶與用戶所具有的權限。分配給每個用戶一個合適的角色,每個角色都具有其對應的權限。一個角色也可以有多個用戶,一個用戶可以有多個角色。一個角色可以有多個權限,相同的權限也可以賦予多個角色。角色作為中間橋梁把用戶和權限聯系起來,一個角色與權限的關聯可以看作該角色擁有的一組權限的集合。權限賦予角色,角色分配給用戶。RBAC 是實施面向企業(yè)的安全策略的一種有效的訪問控制方式,其具有靈活性、方便性和安全性的特點,目前在大型數據庫系統的權限管理中得到普遍應用。角色訪問控制(RBAC)基本模型如圖1所示。
3 .NET 架構與Web Service
.NET框架(.NET Framework) 是由微軟開發(fā),一個致力于敏捷軟件開發(fā)(Agile softwaredevelopment)、快速應用開發(fā)(Rapidapplication development)、平臺無關性和網絡透明化的軟件開發(fā)平臺。.NET是微軟為下一個十年對服務器和桌面型軟件工程邁出的第一步。.NET包含許多有助于互聯網和內部網應用迅捷開發(fā)的技術。從層次結構來看,.NET框架又包括三個主要組成部分:公共語言運行時(CLR:Common Language Runtime)、服務框架(Services Framework)和上層的兩類應用模板——傳統的Windows應用程序模板(Win Forms)和基于ASP.NET的面向Web的網絡應用程序模板(Web Forms和Web Services)。
Web Service技術是一種應用程序,其作用是向用戶提供某些功能,并以受控的方式提供一些服務和數據訪問,其開放接口的訪問方式,可以在任何支持這些標準的操作系統中使用,從而為跨平臺的開發(fā)奠定了基礎。同時出于安全性的考慮,無論是個人或公司站點,都不可能完全開放的進行信息共享,這個時候,Web Service的出現解決就解決了這個問題。Web Service主要由四部分組成,分別是Web服務,服務的提供方、服務的請求方和服務的注冊機構。
4數據庫表的設計
數據庫表的設計,DBMS采用微軟的SQL SERVER 2012,7張表的設計如下。
部門(bm)表的結構如表1所示。
5基于角色的權限動態(tài)分配的實現思路及模塊劃分。
基于角色的權限動態(tài)分配的實現思路:
1)根據用戶表的編號,從用戶角色表中獲取用戶所屬角色;
2)再根據角色編號從角色功能樹表和功能樹表中獲取可以操作的所有資源;
用Treeview控件或menu控件動態(tài)實現用戶權限樹型菜單或下拉菜單的基本思想是:根據角色訪問控制(RBAC) 的基本原理,給用戶分配不同的角色,每個角色對應一些權限,然后根據用戶ID 獲取用戶對應的角色集合,由角色集合獲取對應的權限集合, 再由權限集合利用Treeview 或menu控件動態(tài)生成一棵由該用戶對應的角色能訪問的頁面(模塊)組成的樹型菜單或下拉菜單。這樣,用戶無權訪問的頁面在權限樹型菜單或下拉菜單就不會出現,不同的用戶進入的界面不同,實現了用戶權限的統一管理。
權限管理系統分為:”部門管理”、“用戶管理”和“角色管理”3個功能模塊。
1) 部門管理在:主要分為添加、刪除、修改和查詢。添加1個部門時,同時添加部門對應的角色(可能多個)。
2) 用戶管理:主要分為添加、刪除、修改和查詢。添加一個用戶時,采用用戶、部門、角色進行用戶角色分配(因為一個員工屬于1個部門),即添加1個用戶時,同時分配該用戶相對應的角色。
3) 角色管理:主要分為添加、刪除、修改和查詢。在添加角色時同時分配功能樹。
6系統中Web Service 的設計應用
動態(tài)權限管理系統中大部分的邏輯運算和數據的訪問都是在Web Service 中進行的,客戶端利用Web Service 的方法對具體功能進行實現。在表8中將列出Web Service 的設計應用。
7具體實現
系統開發(fā)平臺采用微軟Visual studio 2010。開發(fā)語言asp.net(c#)。角色添加及分配的功能樹的運行主界面如圖2所示。其中樹型菜單是采用TreeView控件根據數據庫表動態(tài)進行綁定的。
物資管理部門的普通員工登錄系統后根據權限管理系統自動生成的下拉菜單(利用Menu控件)如圖3所示。
基于角色的權限分配系統的下拉菜單的生成核心代碼如下,用到遞歸算法。
private void PopulateMenu()
{
DataTable treeViewData = GetTreeViewData();
AddTopMenuItems(treeViewData); //綁定父節(jié)點
}
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);//綁定子節(jié)點
}
}
private void AddChildMenuItems(DataTable treeViewData, MenuItem parentMenuItems)//綁定子節(jié)點
{
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);//遞歸,綁定子節(jié)點
}
}
8結論
.NET平臺下角色訪問動態(tài)權限管理重點依賴于數據庫的設計,根據數據庫和角色分配權限原理,動態(tài)的生成樹型和下拉菜單。同時因為數據庫的一致性,所以很容易推廣到其他的Web平臺。該權限分配系統在上海某園林公司得到了具體的應用。
參考文獻:
[1] 杜利峰,許淳.基于ASP.NET權限動態(tài)分配的設計與實現[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.