http://firebody.blogbus.com/logs/2004/08/320481.html
一般對(duì)于權(quán)限管理的基本思路是ACL列表。關(guān)系邏輯如下:
user(group)--AccessI(訪問級(jí)別)---resources(各種資源)
一行就是一個(gè)ACL記錄。基于這種原理,opensymphony開發(fā)了兩個(gè)框架:OSUser ,OsAccess。都是很優(yōu)秀的框架,可以去參考一下。
ACL缺點(diǎn):
用數(shù)據(jù)的格式硬性限定權(quán)限管理,失去靈活定制的功能。
ACL以resource,user為主。
抽象不大合理。ACL本身是一個(gè)抽象嗎?值得探討。現(xiàn)實(shí)世界中,一個(gè)人具備一些權(quán)限,這些權(quán)限可以操作特定資源。那我們的抽象就應(yīng)該是user本身關(guān)聯(lián)著權(quán)限,關(guān)聯(lián)的箭頭由User指向權(quán)限,然而ACL中的User與權(quán)限的關(guān)聯(lián)卻是被動(dòng)的關(guān)聯(lián)。
ACL本身不適合反映用戶組(機(jī)構(gòu))權(quán)限繼承關(guān)系。
在OA場(chǎng)合中,也不適合使用ACL。
接下來,我們探討一下基于role的權(quán)限的管理設(shè)計(jì)。
引用一篇java道上的一片帖子:
作者:dunel 出自:http://www.jdon.com
最近對(duì)就有系統(tǒng)人員權(quán)限升級(jí)計(jì)劃——也談人員權(quán)限的設(shè)計(jì)。dunel http://www.jdon.com Apr 16, 2004 5:43 PM 前言: |
|
|
|
Re: 最近對(duì)就有系統(tǒng)人員權(quán)限升級(jí)計(jì)劃——也談人員權(quán)限的設(shè)計(jì)。 | 發(fā)表時(shí)間: Apr 20, 2004 1:28 PM |
| ||
發(fā)表人: dunel 發(fā)表文章: 13 / 注冊(cè)時(shí)間: 2004-04 | ||||
ROLE BASE ACCESS CONTROL 最近研究了RBAC的標(biāo)準(zhǔn),這個(gè)標(biāo)準(zhǔn)剛剛成為美國(guó)國(guó)家標(biāo)準(zhǔn)。http://csrc.nist.gov/rbac/ 下面是我的一些心得和筆記,希望能有用處。 1. RBAC的中心思想就是通過角色來做到用戶和權(quán)限點(diǎn)的關(guān)聯(lián); 2. 擴(kuò)展RBAC角色是可以繼承的。 一般繼承,就是多繼承,一個(gè)角色可以繼承多個(gè)角色; 限制繼承就是單繼承,一個(gè)角色只能繼承一個(gè)角色; 3. 靜態(tài)職責(zé)分離Static Separation of Duty --SSD是說,一個(gè)人一次只能扮演一個(gè)角色; 經(jīng)常在系統(tǒng)的行政角色上實(shí)施SSD;這個(gè)限制強(qiáng)加在人員分配的情況下的; 4. 動(dòng)態(tài)職責(zé)分離 Dynamic Separation of Duty – DSD就是:timely revocation of truest,就是能給人員分配沖突的角色,但是一個(gè)人每次只能扮演其中的一個(gè);原來的設(shè)想中涉及到了DSD就是讓人選擇角色進(jìn)入; |
我們看看一個(gè)XML實(shí)現(xiàn):
user.xml:---》對(duì)應(yīng)role權(quán)限系統(tǒng)中的參與者。
<?xml version="1.0" encoding="UTF-8"?>
<users>
<user id="superuser">
<roles>
<role id="profilestore.administrator"/>
</roles>
<attributes>
<attribute name="firstname" value="superuser"/>
<attribute name="password" value="secret"/>
</attributes>
</user>
<user id="bob">
<roles>
<role id="portal.user"/>
<role id="portal.it"/>
</roles>
<attributes>
<attribute name="firstname" value="Bob"/>
<attribute name="password" value="bob1"/>
</attributes>
</user>
<user id="alice">
<roles>
<role id="portal.user"/>
</roles>
<attributes>
<attribute name="firstname" value="Alice"/>
<attribute name="password" value="alice1"/>
</attributes>
</user>
</users>
----------------------------------------------------------------
rolse.xml:---->對(duì)應(yīng)role權(quán)限設(shè)計(jì)系統(tǒng)中的角色定義
<?xml version="1.0" encoding="UTF-8"?>
<roles>
<role description="This role is for IT users of the portal" id="portal.it">
<resources>
<resource id="gadget.slashdot"/>
</resources>
</role>
<role description="This role is for normal users of the portal" id="portal.user">
<resources>
<resource id="gadget.info"/>
<resource id="gadget.calc"/>
<resource id="gadget.news"/>
<resource id="gadget.joke"/>
<resource id="gadget.cal"/>
</resources>
</role>
<role description="This role can administer the profilestore" id="profilestore.administrator">
<resources>
<resource id="profilestore.AddResource"/>
<resource id="profilestore.AddResourceToRole"/>
<resource id="profilestore.AddRole"/>
<resource id="profilestore.AddRoleToUser"/>
<resource id="profilestore.AddUser"/>
<resource id="profilestore.ChangePassword"/>
<resource id="profilestore.DeleteResource"/>
<resource id="profilestore.DeleteRole"/>
<resource id="profilestore.DeleteUser"/>
<resource id="profilestore.GetUser"/>
<resource id="profilestore.GetUserProperty"/>
<resource id="profilestore.GetUsers"/>
<resource id="profilestore.HasResource"/>
<resource id="profilestore.HasRole"/>
<resource id="profilestore.ModifyUser"/>
<resource id="profilestore.RemoveResourceFromRole"/>
<resource id="profilestore.RemoveRoleFromUser"/>
<resource id="profilestore.SetUserProperty"/>
</resources>
</role>
</roles>
-----------------------------------------------------------------------
resources.xml:--->對(duì)應(yīng)role權(quán)限設(shè)計(jì)中的權(quán)限點(diǎn)
</resource>
<resource description="The ability to add a resource to a role" id="profilestore.AddResourceToRole">
<roles>
<role id="profilestore.administrator"/>
</roles>
</resource>
<resource description="The ability to add a role" id="profilestore.AddRole">
<roles>
<role id="profilestore.administrator"/>
</roles>
</resource>
<resource description="The ability to add a role to a user" id="profilestore.AddRoleToUser">
<roles>
<role id="profilestore.administrator"/>
</roles>
</resource>
<resource description="The ability to add a user" id="profilestore.AddUser">
<roles>
<role id="profilestore.administrator"/>
</roles>
</resource>
<resource description="The ability to change a password" id="profilestore.ChangePassword">
<roles>
<role id="profilestore.administrator"/>
</roles>
</resource>
<resource description="The ability to delete a resource" id="profilestore.DeleteResource">
<roles>
<role id="profilestore.administrator"/>
</roles>
</resource>
<resource description="The ability to delete a role" id="profilestore.DeleteRole">
<roles>
<role id="profilestore.administrator"/>
</roles>
</resource>
<resource description="The ability to delete a user" id="profilestore.DeleteUser">
<roles>
<role id="profilestore.administrator"/>
</roles>
</resource>
<resource description="The ability to get a user's details" id="profilestore.GetUser">
<roles>
<role id="profilestore.administrator"/>
</roles>
</resource>
<resource description="The ability to get a user property" id="profilestore.GetUserProperty">
<roles>
<role id="profilestore.administrator"/>
</roles>
</resource>
<resource description="The ability to get user details" id="profilestore.GetUsers">
<roles>
<role id="profilestore.administrator"/>
</roles>
</resource>
<resource description="The ability to check if a user has a resource" id="profilestore.HasResource">
<roles>
<role id="profilestore.administrator"/>
</roles>
</resource>
<resource description="The ability to check if a user has a role" id="profilestore.HasRole">
<roles>
<role id="profilestore.administrator"/>
</roles>
</resource>
<resource description="The ability to modify a user's details" id="profilestore.ModifyUser">
<roles>
<role id="profilestore.administrator"/>
</roles>
</resource>
<resource description="The ability to remove a resource from a role" id="profilestore.RemoveResourceFromRole">
<roles>
<role id="profilestore.administrator"/>
</roles>
</resource>
<resource description="The ability to remove a role from a user" id="profilestore.RemoveRoleFromUser">
<roles>
<role id="profilestore.administrator"/>
</roles>
</resource>
<resource description="The ability to set a user property" id="profilestore.SetUserProperty">
<roles>
<role id="profilestore.administrator"/>
</roles>
</resource>
</resources>
-------------------------------------------------