转载:ACL权限控制
首先,在數據庫中設計功能模塊表、功能表和角色表等三個表。
(1) 功能模塊表
為了管理好用戶的權限,首先要組織好系統的模塊,為此設計了一個功能模塊表。見表1。
(2) 功能表
每個功能模塊所具有的子功能稱為功能,如商品管理模塊goods(屬于功能模塊的范疇)包含商品信息查詢、商品信息更新、商品信息刪除、商品定價信息查詢以及商品定價信息更新五種功能,功能表的設計見表2。
上面提到的例子可以作為這樣幾條記錄分別插入功能模塊表和功能表。
(3) 角色表
角色表的設計關鍵在于角色值的定義,它是一個由0和1組成的類似二進制數的字符串。而功能表中的funcNo (功能編號)字段表示該功能在角色表的roleValue (角色值)字段中的位置,如果該位置對應的數值是0,表示該角色無此權限,如果值為1,則表示該角色擁有此權限。如角色普通會員的角色值為100100… 00(共100位),如上所示,商品信息查詢的功能編號為0,角色值100100…00的第0位為1,所以該普通會員角色擁有商品信息查詢的功能;相反, 該角色值的第1位為0,而功能編號為1 的功能為商品信息更新,所以該普通會員角色沒有商品信息更新的權限。它們的關系可由圖2來表示。
2、角色的添加
有了上面幾個表,角色頁面的功能模塊以及其對應的功能都可以從功能模塊表和功能表中讀出,如圖3所示。
在將新角色普通會員插入數據庫時,先將角色值的所有位都置為0,然后利用.NET Framework 類庫中的Replace函數將角色值中的打上勾的功能相應的功能編號位的值改為1。
例如,新添加一個角色名為普通會員的角色,它擁有的功能為商品信息查詢(功能編號0)和商品定價信息查詢(功能編號3)兩項,則角色值應為1001000……00(100位),即角色值中第0位和第3位的值為1,其余為0。
3、利用用戶控件實現訪問權限
在定義好用戶控件.ascx文件(head.ascx)及.ascx.cs(head.ascx,cs)文件時,接下去只要在.aspx文件中注冊和聲明它就可以了。
(1) 注冊
<%@ Register TagPrefix="Acme" TagName="Head" Src="../UserControl/headinner.ascx" %>
(2) 聲明
經過實踐,在.aspx文件中聲明.ascx文件可分為幾種情況:
第一種情況:<Acme:Head runat="server" />
第二種情況:<Acme:Head runat="server" flag=0 funcname1=selectgoods funcname2=updategoods />
第三種情況:<Acme: Head runat="server" flag=1 funcname1= selectgoods funcname2=updategoods />
字段flag是用來控制怎樣進行權限檢查的標志,funcname指功能表中的功能英文名。如果flag為空,則不執行權限檢查(第一種情況);否則如 果flag=="0",則表示同時具有selectgoods(商品信息查詢)和 updategoods(商品信息更新)這兩種權限的角色所對應的用戶才有權利查看該頁(第二種情況);否則,如果flag=="1",則認為,具有 selectgoods(商品信息查詢)或 updategoods(商品信息更新)這兩種權限中任意一種權限的用戶就有權利查看該頁(第三種情況)。
上面進行權限檢查的過程全部由用戶控件來實現,其全部方法都封裝在.ascx.cs文件中,其中最主要的一個方法是檢查某一角色是否擁有某一確定權限的 checkAuth(string roleId,string funcEName)方法。這個方法的思想如圖4所示。
圖4中roleValue(角色值)的第0位(selectgoods的功能編號)值為1,表示該角色擁有selectgoods(商品信息查詢)的權 限。這樣,我們把對權限檢查的所有邏輯都封裝在了用戶控件中,因此,對WEB窗體頁.aspx文件而言,只需在導入.ascx文件時確定用戶在訪問該頁面 時所應擁有的權限,而不需對aspx.cs進行任何改動。
由上所述,可以很清楚地看出,只要在用戶控件中對用戶權限進行控制,再把它包括在.aspx文件中(這件事作者本來就是要做的),那么在編程的時候就不必考慮復雜的權限問題了。
轉載于:https://www.cnblogs.com/jerryhong/archive/2008/04/30/1177693.html
總結
以上是生活随笔為你收集整理的转载:ACL权限控制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (转载)The shortest, fa
- 下一篇: VC2005中依然没有Refactori