摘 要:在Web應用軟件中,權限管理是常見的功能,不同用戶具有不同的軟件使用權限,系統根據登錄用戶的角色來完成權限的審定,從而進入用戶的軟件使用界面。在實際應用中,登錄用戶的權限有時會根據實際情況發生變化,從而需要調整相應的用戶權限,常規的權限管理無法適應權限的動態變化。為解決這種問題,設計了一種高效的權限管理方案,利用該方案實現了用戶權限的動態管理,該設計方案已用于實際的軟件項目中,極大地提高了權限管理的靈活性、方便性和高效性。
關鍵詞:Web應用軟件; 用戶權限; 動態管理; 權限組; 權限管理方案
中圖分類號:TP393.09 文獻標識碼:A
文章編號:1004-373X(2010)12-0047-04
Design and Accomplishment of Dynamic Authority Management Based on Web Software
ZHANG Zhi-qiang, YE An-sheng, GU Mu-song
(College of Information Science and Technology, Chengdu University, Chengdu 610106, China)
Abstract:The authority management is a rather common function in the Web applied software. Since different users possess different limits of authority, the system examines and approves a user′s limits of authority according to his role, and then allows him to enter the user interface. Sometimes the authority of the user who logins in may vary according to the actual situation, thus the user′s authority also need to be adjusted. As the common management of authority cannot adapt to the dynamic changes of authority, in order to manage the users′ authority, a more effective plan which can bring about a dynamic management of users′ authority was designed. The plan has already been applied to some practical software projects and has greatly improved the adaptability, convenience and effectiveness of the authority management.
Keywords:Web software; authority of user; dynamic management; authority group; plan of authority management
0 引 言
在Web應用軟件中,權限管理是軟件常見的功能,不同的用戶具有不同的權限使用軟件,當用戶登錄系統時,系統會根據登錄用戶的角色確定登錄用戶的權限,根據用戶的權限進入不同的軟件界面。在軟件的實際應用中,有時需要改變用戶的權限,常見的權限管理一般是通過對角色的切換來完成的。角色種類與權限一般在軟件的前期設計中就已經確定,當角色種類與權限確定后就不容易改變,否則需要更改整個軟件的設計方案,這就是常規的角色管理,常規的角色管理無法靈活地適應實際情況的變化。為解決該缺陷,能夠靈活地適應權限的變化,在軟件的權限管理中需要以動態方式管理和維護角色,從而達到動態設置用戶權限的目的。通過動態的權限管理,將極大地提高用戶權限的管理效率[1-3]。
1 權限組的設計
在Web軟件如科研管理系統中,系統管理員、校科技處老師、一般教師、系科研秘書、系主任等角色的權限在開發系統時就已確定,它們可以以不同角色的用戶登錄系統后進入不同的管理界面。在實際應用中,用戶角色可能會發生變化,例如教師可能在一般教師、系科研秘書、系主任、校科研處老師等不同角色之間變動,這樣當其角色變換后,在不改變用戶登錄帳號的情況下應改變其權限。另外,角色種類以及角色的權限信息也可能會發生改變,需要對角色進行新增、刪除、更新等維護操作。采用常規的角色管理方式無法適應這種動態變化的情況,從而使整個系統的權限管理效率大大降低。為了解決這些問題,設計一種類似于Windows用戶組的權限管理方案,該方案將系統角色作為權限組,通過對權限組的動態管理,高效地實現了用戶權限的動態管理,該方案的關鍵是對權限組的管理。
權限組管理模型如圖1所示[4]。
當權限組創建完成后,每個權限組代表一種角色,對權限組的權限進行設置后,將不同的用戶登錄帳號放入權限組中,該用戶就具有所屬權限組中的所有權限功能,當動態調整權限組的權限時,隸屬于該權限組中的用戶權限就會自動改變,系統也具有對權限組完成新增、修改與更新等維護操作的功能。通過這種方式實現了用戶權限的動態管理[5]。
圖1 權限組管理模型圖
實現權限組管理的關鍵是權限組的權限設置,其通過權限信息串來體現。在系統中設置了很多復選框列表Checkboxlist控件,每個復選框列表控件中放置了6個Checkbox控件,每個Checkbox控件代表1個功能模塊,每個Checkboxlist表示1組功能模塊的組合,根據對控件是否選擇的判定,可以組成“1”或“0”的字符串數據作為該權限組的權限信息串,當Checkbox控件被選則時,表示為“1”,否則表示為“0”。設計界面如圖2所示。
圖2 權限組的權限信息串設置界面
有些Checkbox控件代表的是保留功能,這些保留的Checkbox控件就是擴展功能模塊的預留接口,通過這些預留接口可以為系統增加新的權限功能。通過這種設計,系統管理員可以利用控件的選擇來動態改變權限,系統則可以根據控件的選擇狀態動態構建權限信息串,經過加密后將其存儲到數據庫中,這樣不僅可以防治非法的竄改,還可以從數據庫中提取并解密還原為原始的權限信息串。
這種管理方式能夠以集合方式組織權限組的權限功能模塊,極大地提高權限管理的靈活性、方便性和高效性。權限組管理子模塊的界面如圖3所示。
在該模塊中,權限組信息是通過Gridview控件完成維護操作的,當權限組創建成功后,通過對權限組的維護來調整系統角色及其權限信息。
權限組管理模塊功能如圖4所示。
圖3 權限組管理界面
圖4 權限組管理功能模塊圖
當權限組創建完成后,設定用戶所屬的權限組,該用戶就具有設定權限組的權限功能,當用戶登錄系統時,系統首先從數據庫中讀取所屬權限組的權限信息串,然后經過解密還原為原始的“..10..”信息串,根據信息串動態組合不同的功能模塊并顯示對應的功能模塊控件,進入不同的軟件使用界面。權限組應用的數據處理流程如圖5所示。
圖5 權限組應用的數據處理流程
2 權限動態管理的實現
本文以Oracle 10g為后臺數據庫,利用ASP.NET實現高校科研管理系統為技術平臺,在該系統中實現了動態權限的管理功能。
2.1 相關數據表的設計
權限組表如表1所示[6-7],登錄用戶表如表2所示。
表1 權限組表
字段名稱字段類型約束條件字段說明備注
right_idNumberNOT NULL權限組ID主鍵
right_nameVarchar2(64)權限組名字
rightsVarchar2(32)NOT NULL權限組的權限信息加密存儲
noteVarchar2(200)權限組說明信息備注信息
表2 用戶表
字段名稱字段類型約束條件字段說明備注
eidNumberNOT NULL員工ID主鍵
name Varchar2(10)NOT NULL員工姓名
login_idVarchar2(20)NOT NULL登錄名
passwordVarchar2(20)NOT NULL登錄密碼加密存儲
right_group_idNumberNOT NULL所屬權限組ID外鍵
……………
權限信息串經過加密存儲在rights字段中,用戶表中的right_group_id字段與權限組表的right_id建立外鍵關聯,確定登錄用戶所屬權限組[8]。
2.2 數據層的實現
為了提高操作效率,在實際開發時按照分層方式設計代碼結構,將數據庫操作的代碼封裝在數據層,在業務層完成數據層的調用[9-10]。
public class Getdata
{…//設計Getdata類完成對數據庫的各種操作
public string Get_permit(int uid) //根據權限組編號提取權限組的權限信息串
{ string permit = \"\"; //權限信息串
OracleConnection con = new
OracleConnection(ConfigurationManager.ConnectionStrings[\"DCS\"].ConnectionString); //創建oracle數據庫的連接對象
(DCS為在Web.config中設置的連接字符串)
string cmdstr = \"…\"; //設置獲取權限組信息串的SQL語句
OracleCommand cmd = new OracleCommand();
…
string temp = \"\";
temp = Convert.ToString(cmd.ExecuteScalar());
//從數據庫中提取權限組信息串
SymmetricMethod ke = new SymmetricMethod();
permit = ke.Decrypto(temp);//對權限信息串進行解密還原為原始的信息串
return permit;
}
… //完成對數據庫的各種操作
}
2.3 業務層的實現
2.3.1 權限信息串的構建
每種權限組的權限信息由權限信息串構成,權限信息串的構造是實現權限動態管理的關鍵。當權限組的權限信息串構建完成后,可以完成權限組的添加、刪除和更新等維護操作。以下主要代碼實現了權限信息串的構建:
…
string permit=\"\"; //存儲權限信息串
for(i = 0; i <= 5; i++) //每行6個控件(6個功能權限)的組合
{ if(CheckBoxList1.Items[i].Selected)
permit += \"1\"; elsepermit += \"0\"; }
… //進行多行的組合,最終構建出原始的權限信息串
SyM keyan1 = new SyM();// SyM為設置的密碼處理類
permit = keyan1.Encrypto(permit); //對構建的權限信息串加密
這里permit為加密后的權限信息串,最后存儲在數據庫中。
2.3.2 權限組的驗證
當用戶登錄時,系統根據登錄用戶所屬的權限組從數據庫中提取權限信息串,經過解密還原為原始的信息串,根據信息串動態組合權限功能模塊進入不同的軟件使用界面。以下是主要的驗證代碼:
Getdata keyan = new Getdata();
string permit = \"\";
permit = keyan.Get_permit(Convert.ToInt16(Session[\"eid\"].ToString()));
//Session[\"eid\"].ToString()為登錄時獲取的用戶ID,通過Get_permit從數據庫中提取該用戶的權限信息串
if(permit.Substring(0,1) == \"0\" permit.Substring(1,1) ==\"0\" …permit.Substring(5,1)== \"0\")
t2.Visible = 1;//表示t2功能模塊控件沒有權限使用
else
{ if (permit.Substring(0, 1) == \"0\")
t2_1.Visible = 1;//表示t2_1功能模塊空間沒有權限使用
…} //構造權限功能模塊的顯示與控制問題,當權限信息串某位為“1”時顯示對應的功能模塊,為“0”時屏蔽對應的功能模塊顯示
…
以系統管理員身份登錄系統的界面如圖6所示,以系科研秘書身份登錄系統的界面如圖7所示。
圖6 系統管理員界面
圖7 系科研秘書界面
3 結 語
對權限組進行動態管理,根據實際情況靈活地完成權限的設定,最終實現用戶權限的動態管理,這種設計方案已應用于實際的軟件項目運行中,極大地提高了軟件權限管理的靈活性、方便性和高效性。
參考文獻
[1]周偉,王黎,高曉容.ASP.NET中用戶權限管理的設計與實現[J].福建電腦,2007(11):156-157.
[2]李雪林.基于角色的工作流模型的研究[J].電腦知識與技術,2006(7):186-187.
[3]江克勤,張玉州.ASP.NET應用程序的安全機制的研究[J].巢湖學院學報,2006,8(3):16-21.
[4]楊宗凱,劉宏波,劉琴濤.基于角色的訪問控制在網絡教育中的應用研究[J].計算機應用研究,2005(10)134-136.
[5]胡俊鵬,謝坤武.一種基于角色的訪問控制系統方案[J].湖北民族學院學報,2007,25(2):217-220.
[6]昝風彪.在ASP.NET中基于角色的權限控制設計與實現[J].科技信息,2008(25):84 - 85.
[7]李延偉,李筱寧.B/S中基于角色的用戶權限管理的設計與實現[J].福建電腦,2007(11):152-153.
[8]馬曉玉,孫巖.Oracle 10g數據庫管理應用與開發[M].北京:清華大學出版社,2007.
[9]張英男,高喆.ASP.NET 2.0網絡編程[M].北京:電子工業出版社,2008.
[10][美]GLENN JOHNSON.ADO.NET 2.0高級編程[M].段超,譯.北京:清華大學出版社,2006.
[11]蒲玄及,楊百龍,楊建飛.基于ASP.NET的在線考試系統設計與實現[J] .現代電子技術,2008,31(22):59-61.
[12]王倩,王偉.基于ASP.NET的數據遷移方法[J] .現代電子技術,2008,31(18):71-73.
[13]席生長,胡宏濤. 基于ASP.NET的數據驗證技術研究[J] .現代電子技術,2007,30(23):97-99.