欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

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

程序员文章站 2024-02-19 17:06:58
...
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表:


ThinkPHP3 中APP_GROUP_LIST分组后RBAC无权限有关问题解决方法!
?
以下?access表:


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

?

?

以下role表:


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

以下role_user表:


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

按照以上方式配置登录成功,但是提示无权限!

?

?

目前找到的解决办法是:

修改RBAC主文件:\Lib\ORG\Util\RBAC.class.php

其中通过数据库读取level=1的数据时无法找打匹配值而造成无权限问题。

问题语句:

?

?

        $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',

这句话不知道是否有用,未测试。

?

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

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频