您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“ThinkPHP中RBAC有什么用”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“ThinkPHP中RBAC有什么用”這篇文章吧。
一、什么是RBAC
基于角色的訪(fǎng)問(wèn)控制(Role-Based Access Control)作為傳統(tǒng)訪(fǎng)問(wèn)控制(自主訪(fǎng)問(wèn),強(qiáng)制訪(fǎng)問(wèn))的有前景的代替受到廣泛的關(guān)注。
在RBAC中,權(quán)限與角色相關(guān)聯(lián),用戶(hù)通過(guò)成為適當(dāng)角色的成員而得到這些角色的權(quán)限。這就極大地簡(jiǎn)化了權(quán)限的管理。
在一個(gè)組織中,角色是為了完成各種工作而創(chuàng)造,用戶(hù)則依據(jù)它的責(zé)任和資格來(lái)被指派相應(yīng)的角色,用戶(hù)可以很容易地從一個(gè)角色被指派到另一個(gè)角色。角色可依新的需求和系統(tǒng)的合并而賦予新的權(quán)限,而權(quán)限也可根據(jù)需要而從某角色中回收。角色與角色的關(guān)系可以建立起來(lái)以囊括更廣泛的客觀(guān)情況。
二、ThinkPHP中的RBAC
先看下官方給的實(shí)例所用到的數(shù)據(jù)表,通過(guò)5張表實(shí)現(xiàn)權(quán)限控制,定義如下:
RBAC 要用到5個(gè)數(shù)據(jù)表
think_user (用戶(hù)表)
think_role (用戶(hù)分組表)
think_node (操作節(jié)點(diǎn))
think_role_user (用戶(hù)和用戶(hù)分組的對(duì)應(yīng))
think_access (各個(gè)操作和用戶(hù)組的對(duì)應(yīng))
用戶(hù)表
角色表,有哪些角色,該角色與對(duì)應(yīng)的userid用戶(hù)相關(guān)聯(lián)
根據(jù)用戶(hù)表的id給出對(duì)應(yīng)的角色id相關(guān)聯(lián),也就是給用戶(hù)分配角色,比如userid為3的角色為2,根據(jù)role角色表,7代表員工的角色
access表,權(quán)限表,比如角色id為2,也就是員工的權(quán)限,可以的對(duì)應(yīng)的結(jié)點(diǎn)
結(jié)點(diǎn)表,代表有哪些應(yīng)用-模塊-模塊方法,并且定義了之間的一種關(guān)系,比如noteid為30的是Public模塊,noteid為31,32,33,34的方法add,insert,edit,update都屬于Public。noteid為85的test方法,屬于noteid為84的Game模塊下的方法。
三、config配置文件詳解
我們看看thinkphp官方示例中的config文件:
復(fù)制代碼 代碼如下:
array(
'APP_AUTOLOAD_PATH'=>'@.TagLib',
'SESSION_AUTO_START'=>true,
'USER_AUTH_ON' =>true,
'USER_AUTH_TYPE' =>1, // 默認(rèn)認(rèn)證類(lèi)型 1 登錄認(rèn)證 2 實(shí)時(shí)認(rèn)證
'USER_AUTH_KEY' =>'authId', // 用戶(hù)認(rèn)證SESSION標(biāo)記
'ADMIN_AUTH_KEY' =>'administrator',
'USER_AUTH_MODEL' =>'User', // 默認(rèn)驗(yàn)證數(shù)據(jù)表模型
'AUTH_PWD_ENCODER' =>'md5', // 用戶(hù)認(rèn)證密碼加密方式
'USER_AUTH_GATEWAY' =>'/Public/login',// 默認(rèn)認(rèn)證網(wǎng)關(guān)
'NOT_AUTH_MODULE' =>'Public', // 默認(rèn)無(wú)需認(rèn)證模塊
'REQUIRE_AUTH_MODULE' =>'', // 默認(rèn)需要認(rèn)證模塊
'NOT_AUTH_ACTION' =>'', // 默認(rèn)無(wú)需認(rèn)證操作
'REQUIRE_AUTH_ACTION' =>'', // 默認(rèn)需要認(rèn)證操作
'GUEST_AUTH_ON' =>false, // 是否開(kāi)啟游客授權(quán)訪(fǎng)問(wèn)
'GUEST_AUTH_ID' =>0, // 游客的用戶(hù)ID
'DB_LIKE_FIELDS' =>'title|remark',
'RBAC_ROLE_TABLE' =>'think_role',
'RBAC_USER_TABLE' =>'think_role_user',
'RBAC_ACCESS_TABLE' =>'think_access',
'RBAC_NODE_TABLE' =>'think_node',
'SHOW_PAGE_TRACE'=>1//顯示調(diào)試信息
);
大家看注釋就應(yīng)該懂大半了,其中Public模塊是無(wú)需認(rèn)證的,道理很簡(jiǎn)單,沒(méi)登錄之前大家都是游客身份,如果登錄頁(yè)面也要權(quán)限,那從哪里登錄呢?是吧,呵呵。默認(rèn)網(wǎng)關(guān)地址就是認(rèn)證失敗,沒(méi)有權(quán)限跳轉(zhuǎn)到此處,重新登陸。ADMIN_AUTH_KEY表示超級(jí)管理員權(quán)限,如果你在user表建立一個(gè)名為admin的用戶(hù),那么這個(gè)用戶(hù)就是超級(jí)管理員,不用給它分配權(quán)限,什么權(quán)限都有,為什么要設(shè)置一個(gè)這樣的管理員,因?yàn)楫?dāng)你把權(quán)限分配錯(cuò)了容易引起系統(tǒng)權(quán)限混亂,搞得大家都訪(fǎng)問(wèn)不了,這時(shí)候超級(jí)管理員就來(lái)了。
四、RBAC類(lèi)的幾個(gè)重要的方法
authenticate($map,$model=”)方法 傳入查詢(xún)用戶(hù)的條件和用戶(hù)表的MODEL 返回?cái)?shù)組包含用戶(hù)的信息
saveAccessList($authId=null)方法 傳入用戶(hù)的ID 此方法不返回值,只是設(shè)置 $_SESSION['_ACCESS_LIST']的值,其中包含了所有該用戶(hù)對(duì)應(yīng)的用戶(hù)組的有權(quán)限操作的所有節(jié)點(diǎn) $_SESSION['_ACCESS_LIST']['項(xiàng)目名']['模塊名']['操作名'],以后判斷權(quán)限就是判斷當(dāng)前項(xiàng)目,模塊和操作是否在 $_SESSION['_ACCESS_LIST']中能找到。
checkAccess() 方法 檢測(cè)當(dāng)前模塊和操作是否需要驗(yàn)證 返回bool類(lèi)型
checkLogin()方法 檢測(cè)登錄
AccessDecision($appName=APP_NAME) 方法 就是檢測(cè)當(dāng)前項(xiàng)目模塊操作 是否在$_SESSION['_ACCESS_LIST']數(shù)組中,也就是說(shuō) 在 $_SESSION['_ACCESS_LIST'] 數(shù)組中$_SESSION['_ACCESS_LIST']['當(dāng)前操作']['當(dāng)前模塊']['當(dāng)前操作']是否存在。如果存在表示有權(quán)限 否則返回flase。
getAccessList($authId) 方法 通過(guò)查詢(xún)數(shù)據(jù)庫(kù) 返回權(quán)限列表 $_SESSION['_ACCESS_LIST']的值了。
以上是“ThinkPHP中RBAC有什么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。