源地址 http://aiilive.blog.51cto.com/1925756/1297317
在Web開發中關於權限管理設計大抵涉及到兩個方面:一:功能方面權限設計;二:資源方面權限設計。二者比較來看,功能方面權限的可重用性更高。
1.關於權限:
-
按照角色權限的最簡單的設計
名稱 描述 用戶 不具備管理功能 管理員 具備管理普通用戶的權限 超級管理員 具備管理管理員的權限 上面的設計直接將參與系統的用戶分為三類角色:用戶,管理員,超級管理員。
-
按照角色權限,粒度划分再小些設計
名稱 權限 描述 普通用戶 普通服務 享有系統有限服務 VIP用戶 高級服務 享有VIP服務 上面是用戶的簡單划分示例,通過將用戶進行權限划分,來提供不同的服務。
名稱 權限 描述 產品管理員 管理產品模塊 具備產品模塊的管理操作權限 客戶管理員 管理客戶模塊 具備客戶模塊的管理操作權限 上面是管理員的簡單划分示例,通過將后台管理員進行權限划分,使的每一個管理員角色具備不同的操作權限,並且不同角色的管理員在管理角色上不存在交叉管理,這樣系統的管理部分才有可能保存清晰,完整,有效。
名稱 權限 描述 超級管理員 管理各類管理員 具備最高的管理權限 系統管理員 管理整個系統,包括管理超級管理員 系統管理員具備操作整個系統的最高權限 上面是系統級別的管理簡單划分示例,一個系統建設完成后應該具備自管理的功能,即:系統環境配置,模塊管理,使用系統的干系人管理等都可以通過自身的管理模塊完成,而不是人為的修改數據或者系統程序。
-
按照模塊對角色具備的操作權限進行划分,粒度將更細。對於模塊層的權限划分使得系統權限管理嚴格,個角色的智能更加精確,當然系統的設計,實現也相對復雜。
2.用戶-角色-權限的一個物理模型
設計示例圖如下所示:
說明:
a.用戶-用戶角色-角色:可以構成一個用戶角色權限管理子模塊,即1中最簡單的設計。
b.模塊-模塊權限-權限:可以構成一個模塊權限管理子模塊。注:這里的描述有些欠缺,單獨的看待模塊部分,應該描述為模塊-模塊功能-功能更為恰當。
c.將a和b同過角色權限組合在一起就可以構成一個用戶-角色-權限的按照功能模塊粒度划分的權限管理系統。
3.用戶-角色-權限數據庫中表之間的關聯關系說明:
上述數據庫表的關系圖中的每一張表不涉及具體的字段內容,所具備的字段都是為了描述各個表之間的關聯關系。
實體表:用戶表,角色表,權限表,模塊表;
中間表:用戶角色,角色權限,模塊權限表,用來解決多對多問題;
角色權限表:涉及角色具備的權限,該權限是來自模塊權限,也就是符合2中的模塊權限。
關於角色權限表是用戶-角色-權限系統的一個可擴展口。例如:角色權限可以和權限直接關聯,或者二者之間添加特定場景的其他表。
4.數據庫用例數據,使用用戶-角色-權限系統
-
用戶
-
角色
四種角色(標識列[主鍵],角色編碼,角色名稱)
-
用戶角色
用戶角色標識列,用戶編碼,角色編碼即構成用戶角色中間表。注:實際中一個用戶足矣具備多種角色。
-
模塊
[模塊標識列,模塊編碼,模塊名稱,父模塊編碼,模塊URL]
說明:
父模塊編碼:用於模塊划分粒度層次標識
模塊URL:用於模塊在WBE應用中的訪問標識,當然也可以作為他用。
-
權限
權限標識,權限編碼,權限名稱。
-
模塊權限
模塊權限標識列,模塊編碼,權限編碼。模塊權限表在模塊粒度和權限粒度上對模塊進行的相應的權限設置,可以簡單表述為:具備在某一模塊上的某種權限操作。因此將角色和模塊權限進行關聯將成為角色具備這一粒度層次上的操作權限。
-
角色權限
角色權限標識列,角色編碼,模塊權限編碼
至此,用戶,角色,權限的划分就形成了,而且可以通過實際中需要的用戶,角色,權限的管理程度,進行簡化或者增加表。
5.查詢用戶編碼為400900500的權限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
SELECT
t_account.ACCCODE, t_account.ACCNAME,
t_role.ROLECODE, t_role.ROLENAME,
t_module_privilege.MODUELCODE,
t_module.MODUELCODE, t_module.MODUELNAME,
t_privilege.PRICODE, t_privilege.PRINAME
FROM
t_account, t_account_role, t_role, t_role_privilege, t_module_privilege, t_module, t_privilege
WHERE
t_account_role.ACCCODE=t_account.ACCCODE
AND
t_account_role.ROLECODE=t_role.ROLECODE
AND
t_account.ACCCODE=
"400900500"
AND
t_role_privilege.ROLECODE=t_role.ROLECODE
AND
t_role_privilege.MPID=t_module_privilege.MPID
AND
t_module_privilege.MODUELCODE=t_module.MODUELCODE
AND
t_module_privilege.PRICODE=t_privilege.PRICODE
|
通過面的SQL語句可以查詢到400900500用戶的權限。
上述查詢僅僅說明各表之間的數據關聯關系,在實現開發中這樣的查詢避免使用。
用戶,角色,權限的一個很好的參考示例就是Oracle數據庫的用戶管理機制。Web開發中更多的是涉及到管理用戶,管理員,系統管理,模塊訪問權限,資源訪問等問題的處理。
關於用戶角色權限管理有程序的開發系統,參見如:http://www.oschina.net/p/limiton。