关于thinkPHP3.2.3 Rbac.class.php的认证方式 --- 笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 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'];
 }


可以看到 如果选择了1,也就是登录认证,那么想要获取用户权限列表用
$_SESSION['_ACCESS_LIST']
即可。


但是如果选择了2,实时认证的话,会发现$_SESSION['_ACCESS_LIST']是空的,所以在选用实时认证时,想要获取用户权限列表应用:

扫描二维码关注公众号,回复: 3809845 查看本文章

getAccessList($_SESSION[C('USER_AUTH_KEY')]);


感觉挺简单的,但是我就是弄了很久,心累....




猜你喜欢

转载自blog.csdn.net/LMXQH/article/details/79232101