RBAC权限模型及数据权限扩展的实践
話說大家對(duì)RBAC權(quán)限模型應(yīng)該是耳熟能詳了。但真正用的好的并不多。并且原始的RBAC模型并不包括數(shù)據(jù)權(quán)限的管理,網(wǎng)上也差點(diǎn)兒沒有相關(guān)的文章可以參考。本人經(jīng)過幾個(gè)項(xiàng)目的實(shí)戰(zhàn),在其基礎(chǔ)上擴(kuò)展出一套可行的、簡(jiǎn)單的數(shù)據(jù)權(quán)限模型,希望可以幫助大家解決數(shù)據(jù)權(quán)限管理上的老大難問題。
至于什么是數(shù)據(jù)權(quán)限,請(qǐng)移步我的其它文章,這里不再敷述。
1、關(guān)于角色的繼承:
在上圖描寫敘述的模型中,并沒有實(shí)現(xiàn)角色的繼承。既然一個(gè)用戶能夠分配多個(gè)角色,那么角色是否能繼承還有什么必要呢?實(shí)現(xiàn)這個(gè)毫無必要的功能須要大大添加應(yīng)用的復(fù)雜度,可謂是得不償失。
2、關(guān)于資源和功能:
大家能夠從圖中看到僅僅有一張表的一個(gè)字段用來描寫敘述資源或功能的授權(quán)。在大多數(shù)場(chǎng)景中,資源和功能實(shí)際上無法進(jìn)行嚴(yán)格的區(qū)分。有所差別的僅僅是顆粒度的不同而已。一個(gè)業(yè)務(wù)組能夠算是一種顆粒度最粗的資源。一個(gè)頁面或窗口相對(duì)就精細(xì)一些了;到頁面內(nèi)菜單、工具欄button,就更精細(xì)了。假設(shè)控制的顆粒度達(dá)到頁面元素或界面控件的程度,就是最細(xì)顆粒度的權(quán)限控制了。所以不管你叫資源還是功能、操作。都沒有差別。你要控制的就是那些東西,僅僅須要你描寫敘述出來,就能夠被控制。
3、關(guān)于數(shù)據(jù)權(quán)限:
數(shù)據(jù)權(quán)限的授權(quán)相對(duì)功能權(quán)限來說,是全然不同的兩種類型。怎樣為數(shù)據(jù)授權(quán),這必須從數(shù)據(jù)權(quán)限的本質(zhì)出發(fā),從怎樣鑒別數(shù)據(jù)出發(fā),僅僅有可以像鑒別資源一樣對(duì)數(shù)據(jù)加以鑒別,我們才干對(duì)數(shù)據(jù)進(jìn)行正確的授權(quán)。
假設(shè)我們拋開數(shù)據(jù)值的不同(值的不同不是本質(zhì)的不同)來分析數(shù)據(jù),就會(huì)發(fā)如今一般場(chǎng)景中,數(shù)據(jù)的不同首先是業(yè)務(wù)類型的不同。譬如:訂單數(shù)據(jù)、結(jié)算數(shù)據(jù)、生產(chǎn)計(jì)劃數(shù)據(jù)等等。
對(duì)于同一類型數(shù)據(jù),還能夠以產(chǎn)生數(shù)據(jù)的對(duì)象:業(yè)務(wù)部門、業(yè)務(wù)人員加以區(qū)分。這也是常常遇到的需求:經(jīng)理能夠看到所有的訂單,業(yè)務(wù)員僅僅能看自己的。
什么叫所有?什么叫自己的?前一個(gè)概念對(duì)于不同的業(yè)務(wù)部門,實(shí)際的內(nèi)容往往并不相同。A經(jīng)理的所有訂單指的是A部門的訂單;而B經(jīng)理的所有訂單則是B部門的訂單。
至于所謂的“自己的”。就更加明顯是一個(gè)相對(duì)概念了。張三的和李四的一般來說是不存在交集的。但有時(shí)候。也有一些絕對(duì)性的需求。譬如要求C部門的張三要管A部門訂單的審核,相同C部門的王五則負(fù)責(zé)B部門。
這樣,數(shù)據(jù)權(quán)限的授權(quán)必需要從相對(duì)和絕對(duì)兩個(gè)維度進(jìn)行定義,才干做到邏輯完備。所以模型中也通過兩張表來描寫敘述數(shù)據(jù)權(quán)限,在相對(duì)模式中,用Mode字段來描寫敘述不同的顆粒度,而在絕對(duì)模式中用戶能夠直接指定部門或用戶的ID。此外,用ModuleId字段來定義數(shù)據(jù)的類型,也就是產(chǎn)生業(yè)務(wù)的模塊。這個(gè)字段所包括的邏輯不僅是差別數(shù)據(jù)的業(yè)務(wù)類型,更重要的是為應(yīng)用數(shù)據(jù)權(quán)限提供根據(jù)。
4、關(guān)于權(quán)限的應(yīng)用:
本人在項(xiàng)目中,功能權(quán)限和數(shù)據(jù)權(quán)限都應(yīng)用在數(shù)據(jù)訪問層。利用數(shù)據(jù)庫函數(shù)返回給應(yīng)用程序被授權(quán)的資源或功能的ID集合。
應(yīng)用程序依據(jù)ID集合通過反射載入資源或功能,達(dá)到用戶不能訪問非授權(quán)資源的目的。數(shù)據(jù)權(quán)限的應(yīng)用方法也差點(diǎn)兒相同,將數(shù)據(jù)庫函數(shù)join到業(yè)務(wù)表上去,未授權(quán)的業(yè)務(wù)數(shù)據(jù)就會(huì)被過濾掉。通過join添加的Permission列,則描寫敘述了該行數(shù)據(jù)的讀寫權(quán)限為僅僅讀還是讀寫。
總結(jié)
以上是生活随笔為你收集整理的RBAC权限模型及数据权限扩展的实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 更改分区目录图片
- 下一篇: vue 1.0源代码重点难点分析