一直想學習RBAC,又看了官網的例子,又百度,沒找到合適的教程。因此就只能本身研究了,就拿官網的例子來講吧php
think_access表node
做用是看某個組是否有權限訪問某個模塊下的方法或者訪問某個模塊,這個表少一個pid字段,本身添加就能夠了ide
think_node表,節點表學習
做用是把全部須要的模塊,模塊下的方法都添加進來管理,用這個也能夠直接讀取成後臺的導航this
name字段是模塊,方法的名稱,好比Index模塊,index方法等,
加密
pid,這個模塊或者方法的父id,spa
level,級別,通常項目名是1,模塊是2,方法是3繼承
正常先添加項目名,pid爲0,level爲1,status確定是1了
教程
通常都有個默認的Index模塊,Index模塊下有默認的index方法,md5
因此,插入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表之間的關係