[CommunityServer]看RBAC的一方景象
生活随笔
收集整理的這篇文章主要介紹了
[CommunityServer]看RBAC的一方景象
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
??隨著時間的流逝,CommunityServer已經被我冷落了不少時間了,今天無意中又拿起了這個偉大的工程。可能CS2007的到來還有一段距離,不過也有很多人說那將要花Money去買,不管怎么樣他帶給了我們不少。今天我看了一下一些論壇的權限設置,所以又想起了這個咚咚;其實我對RBAC也不是非常熟悉,可能我天生對會員權限著一塊就有一種恐懼感。閑話就不多說了,切入正題。
? 首先對RBAC的幾個概念要有所了解:RBAC的全名為Role Based Access Control,中文名為角色訪問控制。它具有兩大顯著的特征:1.由于角色/權限之間的變化比角色/用戶關系之間的變化相對要慢得多,減小了授權管理的復雜性,降低管理開銷。2.靈活地支持企業的安全策略,并對企業的變化有很大的伸縮性。
? 粗粒度:表示類別級,即僅考慮對象的類別(the type of object),不考慮對象的某個特定實例。比如,用戶管理中,創建、刪除,對所有的用戶都一視同仁,并不區分操作的具體對象實例。
??細粒度:表示實例級,即需要考慮具體對象的實例(the instance of object),當然,細粒度是在考慮粗粒度的對象類別之后才再考慮特定實例。比如,合同管理中,列表、刪除,需要區分該合同實例是否為當前用戶所創建。
? 其他的概念可以去搜一下,網上很多,這里圖個方便,寫了錯事抄了兩個。下面我們來看看CS中是怎么來實現的:涉及到權限當然是要有用戶的,在CS中用戶是User類;而用戶又和角色掛鉤Role,用戶和角色之間的關系就是UsersInRoles來關聯;Role相當于Group好像其他地方都把它當成Group,在RBAC中用戶是不和權限拴在一起的,每個Role都有各自的Permission;有由于CS是個集成多個ApplicationType的項目,每一個ApplicationType所對應角色的權限有可能不一樣。看一下數據庫的關系圖:
? 在cs_ProductPermissions表中存放的是各個ApplicationType所對應的一些Permission,在cs_SectionPermission表中存放的是各個Section(一些從Section繼承的類)所對應的Permission。下面我們看一下CS中對Permission的定義: ?1?????[Flags()]
?2?????public?enum?Permission?:?long?{
?3?????????Undefined????????=?0,
?4?????????View????????????=?0x0000000000000001,
?5?????????Read????????????=?0x0000000000000002,
?6?????????Post????????????=?0x0000000000000004,
?7?????????Reply????????????=?0x0000000000000008,
?8?????????Edit????????????=?0x0000000000000010,
?9?????????Delete????????????=?0x0000000000000020,
10?????????LocalAttachment????=?0x0000000000000040,
11?????????Vote????????????=?0x0000000000000080,
12?????????MarkAsAnswer????=?0x0000000000000100,
13?????????RemoteAttachment=?0x0000000000000200,
14?????????Video????????????=?0x0000000000000400,
15?????????Ink????????????????=?0x0000000000000800,
16?????????CreatePoll????????=?0x0000000100000000,
17?????????Sticky????????????=?0x0000000200000000,
18?????????Announcement????=?0x0000000400000000,
19?????????EditOthers????????=?0x0000000800000000,
20?????????Moderate????????=?0x0000100000000000,
21?????????Administer????????=?0x0100000000000000,
22?????????SystemAdmin????????=?0x4000000000000000,
23?????}
24?
25?????public?enum?AccessControlEntry?{
26?????????NotSet??=?0x00,
27?????????Allow???=?0x01,
28?????????Deny????=?0x02
29?????}
? 首先對RBAC的幾個概念要有所了解:RBAC的全名為Role Based Access Control,中文名為角色訪問控制。它具有兩大顯著的特征:1.由于角色/權限之間的變化比角色/用戶關系之間的變化相對要慢得多,減小了授權管理的復雜性,降低管理開銷。2.靈活地支持企業的安全策略,并對企業的變化有很大的伸縮性。
? 粗粒度:表示類別級,即僅考慮對象的類別(the type of object),不考慮對象的某個特定實例。比如,用戶管理中,創建、刪除,對所有的用戶都一視同仁,并不區分操作的具體對象實例。
??細粒度:表示實例級,即需要考慮具體對象的實例(the instance of object),當然,細粒度是在考慮粗粒度的對象類別之后才再考慮特定實例。比如,合同管理中,列表、刪除,需要區分該合同實例是否為當前用戶所創建。
? 其他的概念可以去搜一下,網上很多,這里圖個方便,寫了錯事抄了兩個。下面我們來看看CS中是怎么來實現的:涉及到權限當然是要有用戶的,在CS中用戶是User類;而用戶又和角色掛鉤Role,用戶和角色之間的關系就是UsersInRoles來關聯;Role相當于Group好像其他地方都把它當成Group,在RBAC中用戶是不和權限拴在一起的,每個Role都有各自的Permission;有由于CS是個集成多個ApplicationType的項目,每一個ApplicationType所對應角色的權限有可能不一樣。看一下數據庫的關系圖:
? 在cs_ProductPermissions表中存放的是各個ApplicationType所對應的一些Permission,在cs_SectionPermission表中存放的是各個Section(一些從Section繼承的類)所對應的Permission。下面我們看一下CS中對Permission的定義: ?1?????[Flags()]
?2?????public?enum?Permission?:?long?{
?3?????????Undefined????????=?0,
?4?????????View????????????=?0x0000000000000001,
?5?????????Read????????????=?0x0000000000000002,
?6?????????Post????????????=?0x0000000000000004,
?7?????????Reply????????????=?0x0000000000000008,
?8?????????Edit????????????=?0x0000000000000010,
?9?????????Delete????????????=?0x0000000000000020,
10?????????LocalAttachment????=?0x0000000000000040,
11?????????Vote????????????=?0x0000000000000080,
12?????????MarkAsAnswer????=?0x0000000000000100,
13?????????RemoteAttachment=?0x0000000000000200,
14?????????Video????????????=?0x0000000000000400,
15?????????Ink????????????????=?0x0000000000000800,
16?????????CreatePoll????????=?0x0000000100000000,
17?????????Sticky????????????=?0x0000000200000000,
18?????????Announcement????=?0x0000000400000000,
19?????????EditOthers????????=?0x0000000800000000,
20?????????Moderate????????=?0x0000100000000000,
21?????????Administer????????=?0x0100000000000000,
22?????????SystemAdmin????????=?0x4000000000000000,
23?????}
24?
25?????public?enum?AccessControlEntry?{
26?????????NotSet??=?0x00,
27?????????Allow???=?0x01,
28?????????Deny????=?0x02
29?????}
? 上面的兩個枚舉就是所涉及到的權限,Permissions是固定的,一個項目所涉及到的所有控制權限都應該枚舉于此;AccessControlEnty枚舉說明了允許和禁止的兩個所對應的Permission。在這里還有一個必須要提起的一個類,那就是PermissionBase類,在各個的ApplicationType模塊程序的Permission都必須繼承與此類;同時在這個文件中我們還可以看到兩個代理方法用于判斷是否有權限。
本文轉自網魂小兵博客園博客,原文鏈接:http://www.cnblogs.com/xdotnet/archive/2007/02/02/communityserver_userrolepermission_rbac.html,如需轉載請自行聯系原作者
總結
以上是生活随笔為你收集整理的[CommunityServer]看RBAC的一方景象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WPF实例秀——不用属性也Binding
- 下一篇: Hibernate学习(二):heibe