国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > ThinkPHP > 正文

thinkphp RBAC 詳解

2024-09-09 15:20:10
字體:
來源:轉載
供稿:網友

最近用???thinkphp做了個項目,客戶今天又提了個新要求 管理員分權限管理,以前大楷看過THINKPHP 的RBAC的介紹沒仔細研究,現在用到了就找個地方把我對RBAC的理解記一下,免得以后忘記了.

先看下官方給的實例所用到的數據表

RBAC 用到了5個數據表

think_user (用戶表)

think_role (用戶分組表)

think_node (操作節點)

?think_role_user (用戶和用戶分組的對應)

think_access (各個操作和用戶組的對應)

這里重點說一下 think_note

think_note 其實就是記錄下了整個網站操作對應的 項目名稱 模塊名稱 和 操作名稱.

字段name就是當項目,模塊或者操作的名稱了.

字段PID 記錄他們的從屬關系,比如某一個模塊是屬于哪個項目,某個操作屬于哪個模塊。

字段level 表示該節點的層級 換句話就是說 level=1 為項目 ,level=2為模塊 ,level=3就是操作了,比如說 admin項目,他的PID 就是 0 (項目的PID都是0) level就是1,nane就是admin了,admin項目下面有的user模塊,它的level就應該是2,pid就是admin的id, admin下面user模塊的add操作,level就該是3了,pid就應該是前面的user對應的ID.

再說下 rbac類的 方法

authenticate($map,$model='')方法 傳入查詢用戶的條件和用戶表的MODEL 返回數組包含用戶的信息

saveAccessList($authId=null)方法 傳入用戶的ID 此方法不返回值,只是設置 $_SESSION['_ACCESS_LIST']的值,其中包含了所有該用戶對應的用戶組的有權限操作的所有節點 $_SESSION['_ACCESS_LIST']['項目名']['模塊名']['操作名'],以后判斷權限就是判斷當前項目,模塊和操作是否在 $_SESSION['_ACCESS_LIST']中能找到。s

checkAccess() 方法 檢測當前模塊和操作是否需要驗證 返回bool類型

checkLogin()方法 檢測登錄

AccessDecision($appName=APP_NAME) 方法 就是檢測當前項目模塊操作 是否在$_SESSION['_ACCESS_LIST']數組中,也就是說 在 $_SESSION['_ACCESS_LIST'] 數組中$_SESSION['_ACCESS_LIST']['當前操作']['當前模塊']['當前操作']是否存在。如果存在表示有權限 否則返回flase。

getAccessList($authId) 方法 通過查詢數據庫 返回權限列表 $_SESSION['_ACCESS_LIST']的值了。

上面的記錄就是 我個人對RBAC的理解。在開發過程中還遇到個問題,我的項目一有一個 ,但是我又想把 幾個模塊分開管理。想了半天發現AccessDecision($appName=APP_NAME) 是可以傳項目名稱的,那么 我們先分幾個組,也就是LEVEL=1,PID=0的,然后 把模塊分組管理,在使用的時候就麻煩點,每個分組都建一個基類,在基類中if (! RBAC::AccessDecision ()) { 手動給 AccessDecision添加參數,就是當前分組的名稱。然后屬于某個分組的模塊就引用這基類。這樣就達到了同一項目下 分組管理模塊的功能了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 孝昌县| 鹤山市| 北宁市| 新营市| 盘山县| 商南县| 项城市| 上饶市| 马鞍山市| 安义县| 水富县| 娄烦县| 巴彦淖尔市| 宁波市| 讷河市| 伊金霍洛旗| 锡林浩特市| 马龙县| 琼海市| 玉环县| 循化| 昌邑市| 张家界市| 烟台市| 林口县| 修文县| 丹东市| 宜兰县| 宿松县| 保山市| 米林县| 左云县| 康平县| 邵阳县| 德州市| 汝州市| 贺州市| 丹江口市| 岳西县| 广安市| 松溪县|