手把手教你配置3.2.2的RBAC

浏览:3804 发布日期:2015/04/09 分类:技术分享 关键字: Rbac 3.2.2
最近在学习权限配置,看到有关于rbac的视频教程,就学习了下,但是跟着教程做还是出现了问题,因为教程是3.1.3的,自己研究了一下类文件,对照着教程和参考文件配置了一下适合3.2.2的配置文件。
关于对四个表的写入和读取,大家可以找下视频,这里就不介绍如何配置节点和角色了,只说一下我在配置rbac配置文件时候遇到的问题。
其实很简单,至少比视频教程上的简单
首先确保你的四个表都已经导入,并且已经有了节点、角色和用户数据。
有的帖子说有5个表,还有一个用户表,其实这个会员表不需要写,我遇到的问题是按着教程做没有seesion数据,其实saveAccessList()是需要参数的,而且USER_AUTH_TYPE不能为2,填1就可以。
3.2.2和3.1.3有不一样的地方是引入文件
3.1.3是import('@.ORG.Util.RBAC');
3.2.2在头部引用即可 use Org\Util\Rbac;
判断登录,登录成功代码后面加入 Rbac::saveAccessList(会员ID);加在跳转之前,别忘记传参会员ID。
配置文件如下'USER_AUTH_ON'              =>  true,
    'USER_AUTH_TYPE'    =>    1,        // 默认认证类型 1 登录认证 2 实时认证
    'USER_AUTH_KEY'             =>  'authId',    // 用户认证SESSION标记
    'USER_AUTH_GATEWAY'   =>  '/Public/error',// 没有权限进入的页面
    'NOT_AUTH_MODULE'     =>  'Index',    // 默认无需认证模块
    'REQUIRE_AUTH_MODULE'       =>  '',        // 默认需要认证模块
    'NOT_AUTH_ACTION'           =>  '',        // 默认无需认证操作
    'REQUIRE_AUTH_ACTION'       =>  '',        // 默认需要认证操作
    'GUEST_AUTH_ON'             =>  false,    // 是否开启游客授权访问
    'GUEST_AUTH_ID'             =>  0,        // 游客的用户ID
    'RBAC_ROLE_TABLE'           =>  'tp_role',
    'RBAC_USER_TABLE'           =>  'tp_role_user',
    'RBAC_ACCESS_TABLE'       => 'tp_access',
    'RBAC_NODE_TABLE'          =>  'tp_node',
配置我只用到上面这些,其它的都没用到,判断权限代码我用的是官方提供的,加在了公用配置文件中,记得头部引入类文件,因为管理员我是用ID判断的,所有代码如下public function _initialize(){
        if(判断登录状态,如果不是跳转)){
            $this->redirect("Login/index");
        }elseif(会员ID<>1){
//如果不是超级管理员就进行权限验证
            if (C('USER_AUTH_ON') && !in_array(MODULE_NAME, explode(',', C('NOT_AUTH_MODULE')))) {
                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_'));
                    }
                }
            }
        }
    }
如果帮到你了,记得给个好评!!!
最佳答案
评论( 相关
后面还有条评论,点击查看>>