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

WBOY
Libérer: 2016-06-13 10:52:10
original
1021 Les gens l'ont consulté

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表:


?

?

以下role表:


以下role_user表:


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

?

?

目前找到的解决办法是:

修改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
Copier après la connexion

?

其中的:

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

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

?

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!