基于角色管理(RBAC)的權(quán)限系統(tǒng)
這里的權(quán)限系統(tǒng)要區(qū)分2個(gè)概念:
粗粒度:表示類(model)別級(jí),即僅考慮對(duì)象的類別(the type of object),不考慮對(duì)象的某個(gè)特定的實(shí)例。比如,對(duì)合同這個(gè)類別(contract)的管理中,創(chuàng)建、刪除等操作,對(duì)所有的用戶都一視同仁,并不區(qū)分具體的對(duì)象實(shí)例(銷售合同,生產(chǎn)合同)。
細(xì)粒度:表示實(shí)例(instance)級(jí)別,即需要考慮具體對(duì)象的實(shí)例(the instance of object),當(dāng)然,細(xì)粒度是在考慮粗粒度的對(duì)象類別之后才再考慮特定實(shí)例。比如,銷售合同管理中,合同所有者擁有查看、修改、刪除等權(quán)限,其他用戶只有合同的查看權(quán)限。
權(quán)限系統(tǒng)的設(shè)計(jì)原則:權(quán)限邏輯配合業(yè)務(wù)邏輯。即權(quán)限系統(tǒng)以為業(yè)務(wù)邏輯提供服務(wù)為目標(biāo)。
細(xì)粒度的權(quán)限問題因?yàn)槠錁I(yè)務(wù)相關(guān)性而不具通用意義,它們被理解為是“業(yè)務(wù)邏輯”的一部分。比如,要求:“某個(gè)合同只能被它的創(chuàng)建者刪除,與創(chuàng)建者同組的用戶可以修改,所有的用戶能夠?yàn)g覽”。這既是一個(gè)細(xì)粒度的權(quán)限問題,也是一個(gè)業(yè)務(wù)邏輯問題。在這里它是業(yè)務(wù)邏輯問題,在整個(gè)權(quán)限系統(tǒng)的架構(gòu)設(shè)計(jì)之中不予考慮。當(dāng)然,權(quán)限系統(tǒng)的構(gòu)架設(shè)計(jì)也必須要能支持這樣的業(yè)務(wù)邏輯。或者說,系統(tǒng)提供足夠多但不是完全的控制能力。即,設(shè)計(jì)原則歸結(jié)為:“系統(tǒng)只提供粗粒度的權(quán)限,細(xì)粒度的權(quán)限被認(rèn)為是業(yè)務(wù)邏輯的職責(zé)”。
權(quán)限邏輯 ?à 粗粒度
業(yè)務(wù)邏輯 ?à 細(xì)粒度
概念:
Object: 指系統(tǒng)中各種功能模塊,業(yè)務(wù)模型(Model),業(yè)務(wù)對(duì)象(Object),界面元素等,它是主體能訪問到的所有對(duì)象。由于對(duì)象的類型不同,被訪問的權(quán)限也不同。
(1) 系統(tǒng)功能模塊:系統(tǒng)中除了公用的界面,公用的模塊外,其他均為業(yè)務(wù)功能模塊,業(yè)務(wù)操作在設(shè)計(jì)階段完成,因此不存在實(shí)例的概念。可以直接針對(duì)角色進(jìn)行授權(quán)。
(2) 界面元素:除了功能菜單受到控制外,如要控制功能模塊的界面元素其功能模塊界面元素也需定義,大部分界面元素均包含有相關(guān)的業(yè)務(wù)功能操作,因此可以與數(shù)據(jù)模型統(tǒng)一來處理。
(3) 業(yè)務(wù)模型,業(yè)務(wù)對(duì)象:業(yè)務(wù)模型是我們的Domain Model,開發(fā)人員在設(shè)計(jì)開發(fā)階段就已經(jīng)定義好了相關(guān)的業(yè)務(wù)操作,也就是相應(yīng)的權(quán)限。 業(yè)務(wù)對(duì)象是我們業(yè)務(wù)模型的實(shí)例化Domain Object。是用戶在系統(tǒng)運(yùn)行時(shí)創(chuàng)建的,因此它的權(quán)限也是用戶在系統(tǒng)運(yùn)行時(shí)創(chuàng)建的。
粗粒度 |
|
細(xì)粒度 |
|
Domain Model |
業(yè)務(wù)模型,比如合同(Contract Model) |
Domain Object |
業(yè)務(wù)模型的某個(gè)實(shí)例話對(duì)象,比如銷售合同(Sell Contract Object) |
Privilege(Operative, Permission) : 是Object Related的操作。就是指,這個(gè)權(quán)限是綁定在特定的對(duì)象上的。比如說部門新聞的發(fā)布權(quán)限,叫做"部門新聞發(fā)布權(quán)限"。這就表明,該Privilege是一個(gè)發(fā)布權(quán)限,而且是針對(duì)部門新聞這種資源的一種發(fā)布權(quán)限。權(quán)限,包括系統(tǒng)定義權(quán)限和用戶自定義權(quán)限,用戶自定義權(quán)限之間可以指定排斥和包含關(guān)系(如:讀取,修改,管理三個(gè)權(quán)限,管理 權(quán)限 包含 前兩種權(quán)限)。
Role: 是權(quán)限的集合,是粗粒度和細(xì)粒度(業(yè)務(wù)邏輯)的接口。一個(gè)基于粗粒度控制的權(quán)限框架軟件,對(duì)外的接口應(yīng)該是Role,具體業(yè)務(wù)實(shí)現(xiàn)可以直接繼承或拓展豐富Role的內(nèi)容,Role不是如同User或Group的具體實(shí)體,它是接口概念,抽象的通稱。Role的繼承通過Group來體現(xiàn),所以不考慮Role的繼承關(guān)系。但是Role可以與相關(guān)的Group相關(guān)聯(lián),便于授權(quán)。
Group: 用戶組,權(quán)限分配的單位與載體,直接映射組織關(guān)系。權(quán)限不考慮分配給特定的用戶。組可以包括組(以實(shí)現(xiàn)權(quán)限的繼承)。組可以包含用戶,組內(nèi)用戶繼承組的權(quán)限。Group要實(shí)現(xiàn)繼承。即在創(chuàng)建時(shí)必須要指定該Group的Parent是什么Group。在粗粒度控制上,可以認(rèn)為,只要某用戶直接或者間接的屬于某個(gè)Group那么它就具備這個(gè)Group的所有操作許可。細(xì)粒度控制上,在業(yè)務(wù)邏輯的判斷中,User僅應(yīng)關(guān)注其直接屬于的Group,用來判斷是否“同組” 。
但是Group的繼承導(dǎo)致的權(quán)限繼承和組織關(guān)系正好相反,組織關(guān)系的上層相應(yīng)的權(quán)限更大,所以是一種逆向繼承。
User: 純粹的用戶,與權(quán)限(operative?permission?privilege)分離,只能通過Role去關(guān)聯(lián)相應(yīng)的權(quán)限。
關(guān)系:
Privilege ? n : 1 à Resource
Role ? n : n à Privilege
Group ? n : n à User
Group ? n : n à Role
User ? n : n à Role
權(quán)限系統(tǒng)的操作模式:
(1): 創(chuàng)造資源,權(quán)限: 這里要從粗,細(xì)粒度2方面來考慮
粗粒度:開發(fā)人員設(shè)計(jì)DomainModel的時(shí)候就定義好相關(guān)的操作。比如ContractModel
這個(gè)DomainModel,開發(fā)人員設(shè)計(jì)的時(shí)候就已經(jīng)定義好了模型的相關(guān)操作,比如查看,修改等等。默認(rèn)的情況下對(duì)所有的Role都是相同的。
細(xì)粒度: 用戶創(chuàng)建一個(gè)DomainModel的實(shí)例DomainObject的時(shí)候指定相關(guān)的權(quán)
限以及權(quán)限分配。比如銷售合同只能創(chuàng)建者有修改的權(quán)限,同Group的人員只能擁有查看的權(quán)限。
(2): 分配權(quán)限: Administrator指定相關(guān)DomainModel的權(quán)限分配,創(chuàng)建Role,創(chuàng)建Group,給
Group分配User,給Group賦予某個(gè)Role等等。
(3): 使用權(quán)限: User 使用 Administrator分配的角色去使用相應(yīng)的系統(tǒng)功能。
模塊劃分:
1) 對(duì)象管理模塊。此模塊主要負(fù)責(zé)從粗細(xì)粒度對(duì)于系統(tǒng)中可提供的資源或資源實(shí)例進(jìn)行管理。
2) 權(quán)限管理模塊。此模塊主要負(fù)責(zé)對(duì)資源權(quán)限進(jìn)行管理。管理員可以在粗細(xì)粒度下對(duì)資源權(quán)限進(jìn)行管理。用戶可以對(duì)創(chuàng)建的資源實(shí)例進(jìn)行權(quán)限的管理。
3) 角色管理模塊。此模塊主要負(fù)責(zé)對(duì)角色進(jìn)行相應(yīng)的管理(包括添加、刪除、修改);對(duì)角色所擁有的權(quán)限進(jìn)行相應(yīng)的管理(包括授予、刪除所擁有的權(quán)限);對(duì)用戶和組賦予相應(yīng)的角色等等
4) 用戶管理模塊。此模塊主要負(fù)責(zé)對(duì)用戶進(jìn)行管理(包括添加、刪除、修改);對(duì)用戶所屬的角色進(jìn)行管理(包括添加、刪除);對(duì)用戶所屬的組進(jìn)行管理。
5) 組管理模塊。組映射組織機(jī)構(gòu),提供對(duì)于部門組織機(jī)構(gòu)維護(hù)(添加、修改、刪除);對(duì)組的成員進(jìn)行維護(hù);對(duì)組所擁有的角色進(jìn)行管理。
方向:分布式系統(tǒng)設(shè)計(jì)
posted on 2005-04-22 10:40 java光環(huán) 閱讀(2155) 評(píng)論(0) 編輯 收藏 所屬分類: rbac