实现的效果:
不同用户登陆后台会有不同的权限。只有超级管理员有所有权限。在权限管理中首先会展示角色表,每个角色后面有编辑按钮。点击编辑,会递归展示这个角色所有的权限,每个权限可以设置是否能被该角色增删改查。如下图:(蓝色按钮代表该角色有权限操作,红色按钮表示禁用该操作)
步骤:
1、首先要有用户表,然后创建角色表(Role)、权限表(Access)、节点表(Node)。
角色表(Role):每个用户担任的角色不一样,是多对多的关系。所以也要给你的用户设置role_id
权限表(Access):表示哪些角色可以使用哪些节点,也就是角色表和节点表的关系映射。
节点表(Node):因为节点不多,可以手动输入。
2、在Role的控制器add方法里,添加一个Role记录,同时也会在权限表里添加这个Role的所有权限。这就需要在RoleModel层返回在添加时自动增加的id,传到AccessModel里。
(1)Role控制器主要代码:
$id = D(self::$ROLE_MODEL)->adds();
D(self::$ACCESS_MODEL)->adds($id);
(2)RoleModel层代码:
extract(generatePostParamVars());
$conditions=array();
$conditions['name']=$name;
if($this->where($conditions)->find()){
throw new \Exception('名称已经存在!');
}
$data=array();
$data['name']=$name;
//...添加的数据就省略了
if($id = $this->add($data)){
return $id;
}else{
echo $this->_sql();
throw new \Exception(L('OPERATION_FAILED'));
}
(3)AccessModel代码:
$count = M('node')->count();
$data=array();
$data['role_id']=$id;
$data['node_id']=$i;
//以下四个是增删改查的权限
$data['view']=1;
$data['add']=1;
$data['edit']=1;
$data['delete']=1;
if(!$this->add($data)){
echo $this->_sql();
throw new \Exception(L('OPERATION_FAILED'));
}
}
这样,添加一个角色,就会自动添加改角色的权限。(待更)