ThinkPhp RBAC實現原理

2022-05-09 07:30:09 字數 764 閱讀 8258

rbac是英文role-based access control的縮寫,是基於角色訪問進行控制的機制。意思是給每個使用者設定乙個角色,然後根據這個角色來判斷使用者的許可權。

在此基於thinkphp的mvc模式進行簡單的小結(thinkphp的訪問由模組和操作兩部分進行控制)。

rbac一般有五張表組成,分別是:

1.使用者表

2.使用者組表

3.模組表

4.方法表

5.使用者組-方法表

如下圖所示

當使用者訪問某乙個頁面是,可以通過thinkphp的系統常量module_name和action_name,通過session獲取當前使用者的id。

讓**的所有模組都繼承乙個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許可權把控的流程完成,使用者許可權認證完成。

ThinkPHP rbac許可權管理

一 概論 1 簡介 rbac role based access controal 全稱基於使用者組 角色的許可權控制。2 概況 目前來說,一般專案有兩種許可權管理方式 傳統方式 rbac方式。下面依次介紹下 二 傳統模式與rbac模式對比 1 傳統許可權分配方式 典型特徵 將許可權和使用者掛鉤,直...

ConcurrentHashMap實現原理

concurrenthashmap實現原理 在jdk1.7中 concurrenthashmap是通過segment陣列 hashentry陣列 單鏈表的結構進行儲存資料。segment陣列中存放的是hashentry陣列的首位址,hashentry中存放的是乙個單鏈表 首節點位址 put 我們通過...

ConcurrentHashMap 實現原理

由於hashmap是乙個執行緒不安全的容器,主要體現在容量大於總量 負載因子發生擴容時會出現環形鍊錶從而導致死迴圈。因此需要支援執行緒安全的併發容器concurrenthashmap。如圖所示,是由segment陣列 hashentry陣列組成,和hashmap一樣,仍然是陣列加鍊表組成。concu...