thinkphp-权限管理(原生)

实现的效果:

不同用户登陆后台会有不同的权限。只有超级管理员有所有权限。在权限管理中首先会展示角色表,每个角色后面有编辑按钮。点击编辑,会递归展示这个角色所有的权限,每个权限可以设置是否能被该角色增删改查。如下图:(蓝色按钮代表该角色有权限操作,红色按钮表示禁用该操作)



步骤:

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();

        for($i = 1; $i <= $count; $i ++){
            $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'));
            }
        }


这样,添加一个角色,就会自动添加改角色的权限。(待更)

猜你喜欢

转载自blog.csdn.net/qq_33514421/article/details/80046352
今日推荐