上篇记录了一下权限控制部分的实现过程,以及实现的代码。但那些只是实现了简单的权限控制,具体的后台当然要有用户的管理,用户组的管理,规则管理等。这篇主要是写后台部分,和上篇凑成一个完整的环。
第一篇文章传送门:tp3.2.3权限控制详解一
一、用户管理,以及权限管理部分
1、管理员管理
这部分是比较简单的,需要注意的是,添加管理员的时候,要添加对应的分组信息。
2、权限管理
这部分是对应权限组的列表信息。在添加管理员的时候,要同时往auth_group_access表中加上管理员对应的权限组。可以考虑使用数据库的事务。
3、添加和修改权限组对应的权限
在新增权限组的时候,我们需要选择赋予的权限。这里是把所有控制器对应的方法都给列出来,超级管理员可以选择赋予普通管理员权限。
这里需要注意,超级管理员是权限最大的,不要限制超级管理员。
二、左边的菜单显示方式
就像之前说的,我们需要根据用户对应的权限来显示菜单栏目。如果用户没有对应的权限,我们就不显示该栏目。
1、线查询用户对应的所有规则id,也就是控制器方法的id
function getRules($adminId)
{
$ruleArr = M('smj_admin')->where('id='."'$adminId'")->find();
$type = $ruleArr['type'];
$ruleStr1 = M('smj_auth_group')->where('id='."'$type'")->find();
$ruleStr = $ruleStr1['rules'];
//var_dump($ruleStr);
$ruleArr = explode(',',$ruleStr);
return $ruleArr;
}
这个方法是写在Common控制器的,作为一个公用方法。根据传过来的用户id,查询对应的瑞泽信息,并且转化成数组。
2、把获取到的规则数组传递给视图,在视图页进行判断
我这里就是采用最笨的方法。把每个列表页在规则表中对应的id,专门找出来。然后判断这个列表页的id在不在用户对应的权限数组中。在的话就显示,不在的话就不显示。
比如这个图片,我用户信息在auth_rule表中对应的id是12,那我就判断一下,这个12在不在用户的权限数组中。
以上配合上第一篇文章,基本就完成一个闭环。注意把所有的方法,包括JS异步请求的方法,都加入到auth_rule表中。这样就基本OK了。
我这边做的比较简单。如果有更好的方案或者问题,请留言,谢谢。
end