ThinkPhp RBAC實現原理

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權限把控的流程完成,用戶權限認證完成。

相關文章
相關標籤/搜索