一直想學習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,一起學習討論,新手一個,呵呵。