今天從thinkphp官網下載RBAC示例,準備移植我做的項目中。
但是移植完之後,發現只有admin可以登陸,其他用戶登陸提示沒有權限。
從RBAC.class.php中看到
static public function AccessDecision($appName=APP_NAME) {
//檢查是否需要認證
if(RBAC::checkAccess()) {
//存在認證識別號,則進行進一步的訪問決策
$accessGuid = md5($appName.MODULE_NAME.ACTION_NAME);
if(empty($_SESSION[C('ADMIN_AUTH_KEY')])) {
if(C('USER_AUTH_TYPE')==2) {
//加強驗證和即時驗證模式 更加安全 後臺權限修改可以即時生效
//通過數據庫進行訪問檢查
$accessList = RBAC::getAccessList($_SESSION[C('USER_AUTH_KEY')]);
}else {
// 如果是管理員或者當前操作已經認證過,無需再次認證
if( $_SESSION[$accessGuid]) {
return true;
}
//登錄驗證模式,比較登錄後保存的權限訪問列表
$accessList = $_SESSION['_ACCESS_LIST'];
}
//判斷是否爲組件化模式,如果是,驗證其全模塊名
$module = defined('P_MODULE_NAME')? P_MODULE_NAME : MODULE_NAME;
if(!isset($accessList[strtoupper($appName)][strtoupper($module)][strtoupper(ACTION_NAME)])) {
$_SESSION[$accessGuid] = false;
return false;
}
else {
$_SESSION[$accessGuid] = true;
}
}else{
//管理員無需認證
return true;
}
}
return true;
}
發現要用到APP_NAME,而我的項目名爲App。而從數據庫中get的名稱爲Rbac。
所以只要把think_node中name字段爲Rbac改爲App,就可以了。