ThinkPHP RBAC官网的例子详解

一直想学习RBAC,又看了官网的例子,又百度,没找到合适的教程。所以就只能自己研究了,就拿官网的例子来说吧

think_access表

作用是看某个组是否有权限访问某个模块下的方法或者访问某个模块,这个表少一个pid字段,自己添加就可以了

think_node表,节点表

作用是把所有需要的模块,模块下的方法都添加进来管理,用这个也可以直接读取成后台的导航

name字段是模块,方法的名称,比如Index模块,index方法等,

pid,这个模块或者方法的父id,

level,级别,一般项目名是1,模块是2,方法是3

正常先添加项目名,pid为0,level为1,status肯定是1了

一般都有个默认的Index模块,Index模块下有默认的index方法,

所以,插入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表之间的关系



footer.jpg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值