首页 > 代码库 > RBAC 基于角色的访问控制演示
RBAC 基于角色的访问控制演示
RBAC
rbac:Role Based Access Controll,基于角色的访问控制。
今天理一理RBAC,话不多说,直接切入主题
功能需求:
- 权限管理(无限极)
- 角色管理(可以分配权限)
- 管理员管理(管理员属于哪些角色)
- 后台左侧显示当前登录用户所拥有的权限
- 超级管理员拥有所有权限
实现
建表(我们需要三个表,管理员表、角色表、权限表,tip:也可用其它建表方式)
管理员表
权限表
角色表
我制作完的三张表的CRUD,后台首页效果展示(具体的增删改查就不列步骤了):
管理员表
权限表
角色表
功能一实现-无限极权限分类
在这里实现无限极分类不是通过递归,而是通过建表时候多加的一个字段 auth_path
不懂的看我另一篇博文有写不使用递归实现无限极,这里就不多说了
功能二实现-角色管理分配权限
页面实现
视图显示没有什么可说的,有需要源码的、有问题的留言,收集表单信息(tp代码示意)
然后我们讲得到的数组转换成字符串,通过字符串查询所有权限信息
返回数组
接下来拼接字段role_auth_ac,通过get过来的角色id更新数据库
1 public function saveAuth($arr,$role_id){ 2 $str = implode(‘,‘,$arr); 3 $str = rtrim($str); 4 5 $auth_info = D(‘Auth‘)->select($str); 6 $s = ‘‘;//用于拼接 role_auth_ac 字段 7 foreach($auth_info as $v){ 8 if(!empty($v[‘auth_c‘]) && !empty($v[‘auth_a‘])){ 9 $s .= $v[‘auth_c‘] .‘-‘. $v[‘auth_a‘].‘,‘; 10 }11 }12 $s = rtrim($s,‘,‘);13 $sql = "update jy_role set role_auth_ids = ‘$str‘,role_auth_ac = ‘$s‘ where role_id = $role_id";14 return $this->execute($sql);15 }
功能三实现-管理员属于的角色
功能四/五 实现-登录左侧显示所拥有权限
比如我现在用另一个账号登录,(只显示他有的权限)
基本思想就是,首先登录后将管理员的角色id获得,不同的角色id根据数据库里的数据显示不同权限菜单,如下,我的jy_test只有两个权限
视图中显示如下
tp代码示意
$admin_id = session("admin_info[‘admin_id‘]");//管理员id $admin_info = D(‘Admin‘)->find($admin_id);//管理员信息 $role_id = $admin_info[‘role_id‘];//管理员角色id //角色信息 $role_info = M(‘Role‘)->find($role_id); //角色拥有的权限字符串 $auth_ids = $role_info[‘role_auth_ids‘]; if($role_id === 0){ //超级管理员获取所有权限菜单 $auth_infoA = M(‘Auth‘)->where("auth_level = 0")->select(); //顶级权限 $auth_infoB = M(‘Auth‘)->where("auth_level = 1")->select(); //次顶级权限 }else{ $auth_infoA = M(‘Auth‘)->where("auth_level = 0 and auth_id in ($auth_ids)")->select(); //顶级权限 $auth_infoB = M(‘Auth‘)->where("auth_level = 1 and auth_id in ($auth_ids)")->select(); //次顶级权限
后记:只是大致笼统粗糙的说了下流程,有需要源码和有问题的可以私我!
RBAC 基于角色的访问控制演示
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。