RBAC是英文Role-Based Access Control的縮寫,是基於角色訪問進行控制的機制。意思是給每一個用戶設定一個角色,而後根據這個角色來判斷用戶的權限。數據庫
在此基於ThinkPhp的MVC模式進行簡單的小結(ThinkPhp的訪問由模塊和操做兩部分進行控制)。session
RBAC通常有五張表組成,分別是:函數
1.用戶表網站
2.用戶組表this
3.模塊表blog
4.方法表繼承
5.用戶組-方法表it
以下圖所示io
當用戶訪問某一個頁面是,能夠經過ThinkPhp的系統常量MODULE_NAME和ACTION_NAME,經過session獲取當前用戶的ID。function
讓網站的全部模塊都繼承一個AclAction,而AclAction則繼承至Action。
在AclAction中定義一個初始化函數public function _initialize(){},這就意味着當用戶訪問網站上的任意一個頁面時都會執行該函數。
在initialize()函數中,獲取用戶Id、ModuleName、ActionName,經過用戶Id進行數據庫查詢得到用戶組Id,利用用戶組Id、ModuleName、ActionName到數據庫中作多表鏈接查詢,查找Group-Action-Action-Module中是否存在同時知足GroupIp、ModuleId、ActionId的記錄,若存在則說明用戶具備當前頁面的訪問權限,不然沒有,利用ThinkPhp內置函數$this->error()進行提醒並跳轉到登錄頁面。
至此,整個RBAC權限把控的流程完成,用戶權限認證完成。