簡單的權限控制模型,如用戶集合和權限集合中的元素多對多對應。web
但如上模型的缺點是,若是擁有相同權限某類人——好比同一個部門的人,須要增長權限時,每一個人都須要在本身對應的權限集合中添加一個元素,這樣操做繁瑣而且容易出錯,可行的作法是從權限集合中抽象抽一個子集做爲角色,好比x部門成員,將x部門成員與角色對應便可,這樣x部門所有成員的權限便可經過角色來控制。圖示以下:框架
同理,除了引入角色的概念來簡化賦權外,用戶集合也能夠抽象出相似於 權限集合/角色 的用戶組,將角色與用戶組關聯來進行賦權,用戶擁有權限的集合是用戶關聯的角色和用戶所在用戶組關聯的角色的並集。圖示以下(**注意括號中角色與權限是關聯的):
url
資源只有一種,即數據,可是具體的應用系統中須要更細緻的分類來方便權限與資源的關聯。設計
咱們對數據的操做有增刪改查四種。權限類型也能夠按照這四種操做作幾個基本的劃分。好比:3d
以上都是基於頁面渲染來講的。如今公司將權限基本分爲三類:頁面模板、接口和數據模板。個人理解是這種方法和增刪改查的分別是橫切和縱切,相交又包含。一種權限分類圖示以下:blog
能夠根據「權限類型」的取值來區分是哪一類權限,如「MENU」表示菜單的訪問權限、「OPERATION」表示功能模塊的操做權限、「FILE」表示文件的修改權限、「ELEMENT」表示頁面元素的可見性控制等。繼承
注意沒添加一個頁面元素或者文件表,在「文件表」、「權限文件關聯表」和「權限表」中會相應的添加一條記錄。接口
綜上,成型的RBAC模型以下:
資源
以上,三、4小節能夠看做是實踐拓展,RBAC模型分爲RBAC0/1/2/3三種,RBAC0是RBAC1和RBAC2的基礎,RBAC3是RBAC1和RBAC2的合併。權限控制
RBAC1將角色作了分層,引入了等級的概念,相同角色的低等級能夠繼承高等級的權限。圖示以下:
RBAC2是在RBAC0的基礎上加上了約束用戶可以擁有的角色的思想,主要引入了
二者對比圖示以下:
綜上,一個完善的權限框架有:
上述將角色賦予用戶時,要靈活的使用用戶的信息,使用表達式來進行靈活的綁定,好比性別爲男的用戶自動賦權能夠上男廁所。