一直想學習RBAC,又看了官網的例子,又百度,沒找到合適的教程。所以就只能自己研究了,就拿官網的例子來說吧
think_access表
作用是看某個組是否有許可權訪問某個模組下的方法或者訪問某個模組,這個表少一個pid欄位,自己添加就可以了
think_node表,節點表
作用是把所有需要的模組,模組下的方法都添加進來管理,用這個也可以直接讀取成背景導航
name欄位是模組,方法的名稱,比如Index模組,index方法等,
pid,這個模組或者方法的父id,
level,層級,一般項目名是1,模組是2,方法是3
正常先添加項目名,pid為0,level為1,status肯定是1了
一般都有個預設的Index模組,Index模組下有預設的index方法,
所以,插入Index,pid為項目名的id,level為2,再插入index,pid為模組的id,level為3。
think_role為組的表
think_user(自己建的,可以用別的名稱,記得在設定檔裡改掉),使用者表
think_role_user是使用者表和組表的關聯。
接下來,在Lib下建立IndexAction,PublicAction,CommonAction
然後複製官網RBAC例子裡的Conf下的config.php中的內容到自己的項目裡,
關於RBAC所有的配置
'USER_AUTH_ON' => true,
'USER_AUTH_TYPE'=> 2,// 預設認證類型 1 登入認證 2 即時認證
'USER_AUTH_KEY' => 'authId',// 使用者認證SESSION標記
'ADMIN_AUTH_KEY'=> 'administrator',
'USER_AUTH_MODEL' => 'User',// 預設驗證資料表模型,如果使用者表名稱不是User的話自己改
'AUTH_PWD_ENCODER' => 'md5',// 使用者認證密碼加密方式
'USER_AUTH_GATEWAY' => '/Public/login',// 預設認證網關
'NOT_AUTH_MODULE' => 'Public',// 預設無需認證模組
'REQUIRE_AUTH_MODULE' => '',// 預設需要認證模組
'NOT_AUTH_ACTION' => '',// 預設無需認證操作
'REQUIRE_AUTH_ACTION' => '',// 預設需要認證操作
'GUEST_AUTH_ON' => false, // 是否開啟遊客授權訪問
'GUEST_AUTH_ID' => 0, // 遊客的使用者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',
然後在CommonAction中添加
function _initialize() {
import('@.ORG.Util.Cookie');
// 使用者權限檢查
if (C('USER_AUTH_ON') && !in_array(MODULE_NAME, explode(',', C('NOT_AUTH_MODULE')))) {
import('@.ORG.Util.RBAC');
if (!RBAC::AccessDecision()) {
//檢查認證識別號
if (!$_SESSION [C('USER_AUTH_KEY')]) {
//跳轉到認證網關
redirect(PHP_FILE . C('USER_AUTH_GATEWAY'));
}
// 沒有許可權 拋出錯誤
if (C('RBAC_ERROR_PAGE')) {
// 定義許可權錯誤頁面
redirect(C('RBAC_ERROR_PAGE'));
} else {
if (C('GUEST_AUTH_ON')) {
$this->assign('jumpUrl', PHP_FILE . C('USER_AUTH_GATEWAY'));
}
// 提示錯誤資訊
$this->error(L('_VALID_ACCESS_'));
}
}
}
這個的作用說白了就 檢查是否有許可權登入和是否有許可權訪問而已。
然後IndexAction繼承CommonAction
預設沒有登入或者沒有許可權會調轉到Public/login,Public直接看官網的例子把~應該沒問題。
最重要的是access表和node表,role表中的關係要弄清楚了,還有role,role_user,user表之間的關係。其實就這麼簡單。如果還有問題的話可以加群252799167,一起學習討論,新手一個,呵呵。
本文出自 “尛雷” 部落格,請務必保留此出處http://a3147972.blog.51cto.com/2366547/1213321