版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LMXQH/article/details/79232101
在用 tp3.2自带的Rbac权限类做后台系统的时候,发现权限的添加不能实时的反应出来。最后发现是在配置验证方式的时候选择了登录验证导致的。
配置文件如下:
'ADMIN_AUTH_KEY' => 'superadmin', //超级管理员识别
'USER_AUTH_ON' => true, //是否需要认证
'USER_AUTH_TYPE' => 2, //认证类型 1为登录后才认证 2为实时认证
'USER_AUTH_KEY' => 'authid', //认证识别号
//'REQUIRE_AUTH_MODULE' =>'' //需要认证的模块
'NOT_AUTH_MODULE' => 'Index,Public', //无需认证的模块
//'USER_AUTH_GATEWAY' =>'/public/login', //认证网关
'RBAC_ROLE_TABLE' => 'think_role', //角色表名称
'RBAC_USER_TABLE' => 'think_role_user', //用户表名称
'RBAC_ACCESS_TABLE' => 'think_access', //权限表名称
'RBAC_NODE_TABLE' => 'think_node', //节点表名称
主要是之前没用过这个类。不知道‘USER_AUTH_TYPE’这个字段的登录认证和实时认证是什么来的,就直接设置了一个1,然后在后台进行权限添加或删除时,发现并没有起到作用,也就是更改后不能即时生效。
查看一下Rbac文件有一段这样的代码:
if(C('USER_AUTH_TYPE')==2) {
//加强验证和即时验证模式 更加安全 后台权限修改可以即时生效
//通过数据库进行访问检查
$accessList = self::getAccessList($_SESSION[C('USER_AUTH_KEY')]);
}else {
// 如果是管理员或者当前操作已经认证过,无需再次认证
if( $_SESSION[$accessGuid]) {
return true;
}
//登录验证模式,比较登录后保存的权限访问列表
$accessList = $_SESSION['_ACCESS_LIST'];
}
$_SESSION['_ACCESS_LIST']
即可。
但是如果选择了2,实时认证的话,会发现$_SESSION['_ACCESS_LIST']是空的,所以在选用实时认证时,想要获取用户权限列表应用:
getAccessList($_SESSION[C('USER_AUTH_KEY')]);
感觉挺简单的,但是我就是弄了很久,心累....