欢迎访问 licqi IT技术
我们一直在努力

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表之间的关系


赞(0) 打赏
未经允许不得转载:licqi IT技术 » ThinkPHP RBAC官网的例子详解
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏