网站

ThinkPHP RBAC 设置用户权限

分类 :thinkphp     2017-11-29 人气: 0条评论

因TP的控制器特性,所以RBAC的权限设置,其实是对访问路径的设置。

其权限主要在这三方面进行:第一方面:数据表中设置权限值,第二方面:在全局中定义权限分类,第三方面:在中间控制器中使用

数据表中设置

设置了role_id字段,用于存放权限值,如1是管理员,其它也自定义

配置文件中定义

当前项目中的配置文件中定义,当前项止是Admin项目,路径是:Application-Admin-Conf-config.php,里面写入以下内容
#RBAC权限管理 即 用户权限管理
    #角色数组
    'RBAC_ROLES'	=>	array(
							1	=>	'高层管理',
							2	=>	'中层领导',
							3	=>	'普通职员'
							),
    #权限数组
    #下面的每个数组内放的都是控制器名称
    'RBAC_ROLE_AUTHS'	=>	array(
								1	=>	'*/*',#拥有全部权限
								2	=>	array('index/*','email/*','doc/*','knowledge/*'),
								3	=>	array('index/*','email/*','knowledge/*')
								),

中间控制器内容

关于中间控制器的建立,看下面这篇文章
http://www.xiuyuanxi.com/it/web/1511401004.html
在里面添加以下内容
#RBAC部分
			$role_id = session('role_id');
			
			$rbac_role_auths = C('RBAC_ROLE_AUTHS'); #获取全部用户组权限	
			$currRoleAuth = $rbac_role_auths[$role_id]; #获取当前用户对应的权限
			
			#使用常量获取当前路由中的控制器名和方法名
			$controller = strtolower(CONTROLLER_NAME);
			$action = strtolower(ACTION_NAME);
			if($role_id > 1)
			{
				#当用户不是超级管理员时进行权限判断
				if(!in_array($controller . '/' . $action,$currRoleAuth) && !in_array($controller . '/*' , $currRoleAuth))
				{
					#用户没有权限
					$this->error('你没有权限');exit;
				}
			}

使用后效果

功能使用后我们访问没有权限的目录会出现下面的错误


继续阅读