您的位置:首页 > 编程语言 > PHP开发

ThinkPHP中RBAC类_ACCESS_LIST显示为空的解决方法

2015-10-12 15:27 627 查看
使用ThinkPHP框架中的RBAC类验证用户权限时,调用saveAccessList方法会输出一个数组,_ACCESS_LIST显示的是该用户的所属权限,如果为空则表示没有权限。

原因分析:

终极原因就是think_access数据表中只保存了方法级别的角色——节点对应信息,而没有保存控制器——节点和应用——节点的数据。

解决方法:

1、分配子级权限时记得勾选父级节点。

2、分配时不必勾选,在PHP后端处理时自动根据子级节点数据添加父级节点信息。

有少部分童鞋可能也勾上了父权限,甚至也保存了父节点信息,但_ACCESS_LIST还是为空怎么办?小云我就遇到了这个问题。折腾了半天发现是建表出问题了。

原因分析:

有些字段的外键没有创建,导致数据调不到。

解决方法:

除了user表可以自建以外,其他四个表结构直接复制Rbac.class.php里的内容即可。这里贴上表结构,需要的自己复制:

// 角色-节点中间表
CREATE TABLE IF NOT EXISTS `think_access` (
`role_id` smallint(6) unsigned NOT NULL,
`node_id` smallint(6) unsigned NOT NULL,
`level` tinyint(1) NOT NULL,
`module` varchar(50) DEFAULT NULL,
KEY `groupId` (`role_id`),
KEY `nodeId` (`node_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

// 节点表
CREATE TABLE IF NOT EXISTS `think_node` (
`id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`title` varchar(50) DEFAULT NULL,
`status` tinyint(1) DEFAULT '0',
`remark` varchar(255) DEFAULT NULL,
`sort` smallint(6) unsigned DEFAULT NULL,
`pid` smallint(6) unsigned NOT NULL,
`level` tinyint(1) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `level` (`level`),
KEY `pid` (`pid`),
KEY `status` (`status`),
KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

// 角色表
CREATE TABLE IF NOT EXISTS `think_role` (
`id` smallint(6) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL,
`pid` smallint(6) DEFAULT NULL,
`status` tinyint(1) unsigned DEFAULT NULL,
`remark` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `pid` (`pid`),
KEY `status` (`status`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ;

// 角色-用户中间表
CREATE TABLE IF NOT EXISTS `think_role_user` (
`role_id` mediumint(9) unsigned DEFAULT NULL,
`user_id` char(32) DEFAULT NULL,
KEY `group_id` (`role_id`),
KEY `user_id` (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  thinkphp rbac 权限控制