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