andyj2ee

          java tec sky

          統(tǒng)計(jì)

          留言簿(4)

          activemq

          aop

          design pattern

          other blog

          spring

          workflow

          多線程

          軟件架構(gòu)師

          閱讀排行榜

          評(píng)論排行榜

          基于角色管理(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不是如同UserGroup的具體實(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í)必須要指定該GroupParent是什么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


          只有注冊用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 阿荣旗| 封丘县| 老河口市| 延寿县| 肥城市| 永安市| 迭部县| 日土县| 泸水县| 五家渠市| 富川| 三原县| 台前县| 都昌县| 临江市| 巴彦淖尔市| 文化| 岳阳县| 绍兴县| 新竹县| 大关县| 承德县| 邵东县| 芷江| 甘南县| 鲁山县| 津市市| 塔城市| 夏河县| 科技| 托里县| 沙田区| 区。| 德江县| 安岳县| 郓城县| 赞皇县| 平谷区| 商水县| 云霄县| 安顺市|