跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

ThinkPHP3 中APP_GROUP_LIST分组后RBAC无权限有关问题解决方法!

ThinkPHP3 中APP_GROUP_LIST分组后RBAC无权限问题解决办法!!! 转载请注明出处:http://tyllxx.iteye.com/blog/1693553 今天在官网下的rbac示例,解压出来放到网站根目录,配合TP3.1的框架,运行正常,进入也正常。权限也正常,数据库无问题。 将配置文件改名为config.inc.php,放在App目录下,配置文件中加入 ? ?? ???'APP_GROUP_LIST'=>'admin,member', ? ?? ???'DEFAULT_GROUP'=>'', 采用分组后Conf文件夹下新建admin,member文件夹,目录中包含config.php,Conf文件夹下也含config.php(不是原先的),内容如下: $config=require './App/config.inc.php'; $array=array(); return array_merge($config,$array); 转载请注明出处:http://tyllxx.iteye.com/blog/1693553? CommonAction文件中: if (!RBAC::AccessDecision(GROUP_NAME)) {//增加GROUP_NAME参数 \Lib\Action文件夹下新建admin,member文件夹,复制\Lib\Action文件夹下IndexAction.class.php文件到新建的admin,member两个文件夹中。 \Tpl文件夹下新建admin,member文件夹,复制\Tpl文件夹下Index文件夹到新建的admin,member两个文件夹中。 配置数据库中权限(为了方便测试删除了数据表中原有的权限): ? 以下 node 表: ? 以下? access 表: 立即学习 “ PHP免费学习笔记(深入) ”; ? ? 以下role表: 以下role_user表: 按照以上方式配置登录成功,但是提示无权限! ? ? 目前找到的解决办法是: 修改RBAC主文件:\Lib\ORG\Util\RBAC.class.php 其中通过数据库读取level=1的数据时无法找打匹配值而造成无权限问题。 X-Node企业快速建站1.0.6.0801 特色介绍: 1、ASP+XML+XSLT开发,代码、界面、样式全分离,可快速开发 2、支持语言包,支持多模板,ASP文件中无任何HTML or 中文 3、无限级分类,无限级菜单,自由排序 4、自定义版头(用于不规则页面) 5、自动查找无用的上传文件与空目录,并有回收站,可删除、还原、永久删除 6、增强的Cache管理,可单独管理单个Cache 7、以内存和XML做为Cache,兼顾性能与消耗 8、 下载 问题语句: ? ?
$db = Db::getInstance(C('RBAC_DB_DSN')); $table = array('role'=>C('RBAC_ROLE_TABLE'),'user'=>C('RBAC_USER_TABLE'),'access'=>C('RBAC_ACCESS_TABLE'),'node'=>C('RBAC_NODE_TABLE')); $sql = "select node.id,node.name from ". $table['role']." as role,". $table['user']." as user,". $table['access']." as access ,". $table['node']." as node ". "where user.user_id='{$authId}' and user.role_id=role.id and ( access.role_id=role.id or (access.role_id=role.pid and role.pid!=0 ) ) and role.status=1 and access.node_id=node.id and node.level=1 and node.status=1"; $apps = $db->query($sql); 转载请注明出处:http://tyllxx.iteye.com/blog/1693553
? 其中的: "where user.user_id='{$authId}' and user.role_id=role.id and ( access.role_id=role.id ?or (access.role_id=role.pid and role.pid!=0 ) ) and role.status=1 and access.node_id=node.id and node.level=1 and node.status=1"; ? 改为: ? "where user.user_id='{$authId}' and user.role_id=role.id ?and role.status=1 and access.node_id=node.id and node.level=1 and node.status=1"; ? 就可以正确识别分组后的权限。。。。 ? 配置文件中 'RBAC_GROUP_NAME'=>'admin,member', 这句话不知道是否有用,未测试。 ?

相关文章