PHP 基於角色的訪問控制RBAC

2021-09-06 17:28:38 字數 1449 閱讀 5743

rbac(role based access control),意為基於角色的訪問控制,這裡使用者不再擁有單獨許可權,而是與角色相關聯,通過賦予角色許可權,那麼該使用者也就擁有了這個角色的許可權; 這裡的角色可以也理解為使用者組。

許可權控制位置:在公共的控制器類的構造方法內,這樣子類均需進行許可權驗證; 登入註冊所在控制器可以不用繼承,以ci框架為例:包含登入的控制器直接繼承ci_controller, 包含其他方法的控制器繼承my_controller進行許可權控制。

$access_list = array

(       'auth'=>array

(          'index'=>array

(              [0]=>'index',[1]=>'add',),

'user'=>array

(              [0]=>'index',[1]=>'add',[2]=>'delete',),),);

三步驟 實現rbac =>

一,需要的5張資料表如下:

使用者表角色表(使用者組)

使用者和角色關聯表(便於存單個使用者存多個角色; 否則要在使用者表存roleid,多個值)

許可權表(節點表:角色id,節點id,節點pid)

角色與許可權關聯表

(4張表實現的rabc是採用的單角色思路,可以省略掉「使用者和角色關聯表」,將角色id直接存入使用者表,可以省掉一些**量)

二,通過使用者的id獲取所有的節點許可權:

1. 通過使用者的id將使用者的角色id查詢出來,function getroleid(){}

2. 通過使用者的角色id來獲取所有的節點id,function getnodeid(){}

3. 通過所有的節點id來獲取節點名稱,組裝陣列(也可存入session),function getnodes(){}  function getnodename(){}

三,驗證許可權:

通過$_get['c']和$_get['m']與$access_list['auth']中的進行對比,如果存在,擁有許可權,否則無許可權,進行踢出; 這裡用到了函式array_key_exists()。

強調:登入退出在非公共的控制器內,不參與許可權控制。

如果有使用了ajax,那麼同樣可以驗證,**區域性如下:

/**

|---------------------------------------------

|開啟許可權控制方法(以ci框架為例)

|@黑眼詩人

|---------------------------------------------

*/protected

function

opencheck()

else

}}

你還可以在上述**中加入判斷,如:超級管理員角色不受限制,這樣更符合許可權系統的需求。

link:

@黑眼詩人 

AOP 自定義註解 實現角色的訪問控制(RBAC)

aop除了可以通過切入點表示式指定需要切入的方法,還有與註解相關的寫法 通過在方法上註自定義註解,註解帶不同的許可權碼 方法被呼叫前,aop攔截檢視是否有此許可權,有則放行 自定義註解 target elementtype.method retention retentionpolicy.runti...

Informix 基於角色的訪問控制

在角色訪問控制中,角色即一組被授權的操作的集合。操作 許可給 角色 許可給 使用者 乙個使用者可以擁有多個角色。乙個角色可以擁有多個使用者。角色的定義,分配,刪除,只能由管理員執行。如果使用者不具備任何角色,那將不能進行任何操作。高階角色對低階角色有繼承功能。避免重複許可權設定。兩個互斥角色不能賦值...

RBAC 基於角色的訪問控制

rbac role based access control,基於角色的訪問控制 就是使用者通過角色與許可權進行關聯。簡單地說,乙個使用者擁有若干角色,每乙個角色擁有若干許可權。這樣,就構造成 使用者 角色 許可權 的授權模型。在這種模型中,使用者與角色之間,角色與許可權之間,一般者是多對多的關係。...