咱們開發一個系統,必然面臨權限控制的問題,即不一樣的用戶具備不一樣的訪問、操做、數據權限。造成理論的權限控制模型有:自主訪問控制(DAC: Discretionary Access Control)、強制訪問控制(MAC: Mandatory Access Control)、基於屬性的權限驗證(ABAC: Attribute-Based Access Control)等。最常被開發者使用也是相對易用、通用的就是RBAC權限模型(Role-Based Access Control),本文就將向你們介紹該權限模型。程序員
RBAC權限模型(Role-Based Access Control)即:基於角色的權限控制。模型中有幾個關鍵的術語:spring
RBAC權限模型核心受權邏輯以下:數據庫
想到權限控制,人們最早想到的必定是用戶與權限直接關聯的模式,簡單地說就是:某個用戶具備某些權限。如圖:springboot
這種模型可以清晰的表達用戶與權限之間的關係,足夠簡單。但同時也存在問題:框架
在實際的團體業務中,均可以將用戶分類。好比對於薪水管理系統,一般按照級別分類:經理、高級工程師、中級工程師、初級工程師。也就是按照必定的角色分類,一般具備同一角色的用戶具備相同的權限。這樣改變以後,就能夠將針對用戶賦權轉換爲針對角色賦權。數據庫設計
咱們能夠用下圖中的數據庫設計模型,描述這樣的關係。學習
可是在實際的應用系統中,一個用戶一個角色遠遠知足不了需求。若是咱們但願一個用戶既擔任銷售角色、又暫時擔任副總角色。該怎麼作呢?爲了增長系統設計的適用性,咱們一般設計:操作系統
咱們能夠用下圖中的數據庫設計模型,描述這樣的關係。設計
爲了適應這種需求,咱們能夠把頁面資源(菜單)和操做資源(按鈕)分表存放,如上圖。也能夠把兩者放到一個表裏面存放,用一個字段進行標誌區分。blog
數據權限比較好理解,就是某個用戶可以訪問和操做哪些數據。
因此爲了面對複雜的需求,數據權限的控制一般是由程序員書寫個性化的SQL來限制數據範圍的,而不是交給權限模型或者Spring Security或shiro來控制。固然也能夠從權限模型或者權限框架的角度去解決這個問題,但適用性有限。