美文网首页
RBAC小结

RBAC小结

作者: 表弟_212 | 来源:发表于2018-06-12 18:33 被阅读0次

三张表来总结后台:用户表  角色表  权限表

注册后台登陆用户选择对应角色,角色表中 auth_id_list字符串()字段对应权限表中所拥有的权限

权限操作:

权限的添加对数据的有效性,在validate(继承think下的validate)中对数据的场景验证 文件名要和控制器名一直,如果验证不通过 返回的结果用error提示时 要进行分割! 添加权限的无限极分类

验证场景继承于think下的validate  看手册

在选择顶级分类时pid等于0 当然对输入text文件也要进行相对应的阻止

Readonly和disable的区别是readonly可以接收到了post提交值  

权限的展示:控制器读取即可

注意:如何读取到父类权限名? 连表 ? 否认 介绍一个牛逼的方法经常用到

把id作为数组的下标  根据当前的pid找到数据下标为pid里面的name即可!

权限的编辑:在显示页面 编辑传入id读取回显

默认选中当前的父类这里只需要用jq即可

$("select[name='pid']").val("{$Info.pid}");  /默认当前点击进来的父类

再利用jq判断pid 等于0  等于就是顶级权限 就不显示控制器和方法 设置为不可用

在编辑时候如果选择权限的时不可在自己的子孙下面使用jq递归实现

先移除当前的自身在判断循环出来的数据(id)是否等于当前的pid 等于就移除

[if !supportLists]2、[endif]角色表的curd操作

取出角色表所有的数据(角色表中auth_id_list对应的是权限中的id)

两步骤:   1取出数据把id作为数据的id  2:根据pid分钟 查出id

对于模板的遍历显示:遍历 $children里面的id  而$auths里面的$id中的name就是值!

在提交的过程中CheckBox是一个数组  通过在模型中的前置钩子来对数据分类 implode函数    验证器---省略

以后在模板中凡是需要取出含有(父子孙)层级关系的数据,可以使用下面这个技巧。

技巧一:取出所有的权限:并且以auth_id为每个元素的下标。

技巧二:取出所有的权限,通过pid进行分组,把具有相同的pid划分为同一组

角色编辑功能:

Id传入查询出数据 模板显示

注意:如何默认勾选角色已有的权限  通过jq(jq可真的个好东西).....

先获取得到的所有的auth_id_list的值  通过Jq中split 分割数组  在设置默认选择即可

角色的列表展示

把一个角色所拥有的权限都查出来,这里需要利用到两个mysql函数:

FIND_IN_SET和group_concat(字段)

[if !supportLists]l [endif]FIND_IN_SET(str,strlist) :   

作用:查询出子串str,是否在由逗号分隔的目标字符串strlist中存在。

存在则返回所在目标字符串strlist的所在位置,不存在则返回0。

[if !supportLists]l [endif]group_concat(字段)

作用:主要根据某个字段进行分组,把相同字段的值连接在一起。

默认连接符号是逗号,如果用|连接则:

根据cat_id字段进行分组,把具有相同cat_id的title字段值连接在一起。

查询出当前角色所拥有的全部权限拼接在一起:

对模板的输出

实现不同用户登录展示不同后台菜单

[if !supportLists]a、[endif]思路:用户登录成功的时候,获取到role_id。

[if !supportLists]b、[endif]通过role_id获取角色表的auth_id_list字段

[if !supportLists]c、[endif]通过权限表auth_id只要在auth_id_list字段存在即可,查出所拥有的权限

超级管理员auth_id_list字段的值为*,代表拥有后台操作的所有权限。

步骤1:在用户登录成功的模型的checkUser方法中,通过角色id把当前角色所有的权限写入到session。

后台left.html模板文件中,只需要显示一级和二级的权限即可:

我们需要构造出一个特定数据结构的数据:

如下:通过每个顶级(pid=0)的元素加个一个sonsAuth下标存储其对应的子级权限

[

auth_name=>‘用户管理’

auth_id =>46

pid => 0

......

sonsAuth=>[

[auth_name=>用户列表,’pid’=>46]

[auth_name=>用户添加,’pid’=>46]

.....

]

]

超级权限(*)和普通权限

通过登陆之后用户表中的role_id来得到role角色表中auth_id_list的权限的字段

在left.html取出session中的权限,遍历访问的菜单

权限防翻墙

结个尾:用ajax控制用户当前的状

态:无非就是通过ajax提交数据到PHP PHP来进行更新 更新返回对应的结果

先给标签加一个a标签,并且阻止默认行为,同时加一个is_active(是否禁用)和user_id属性,目的是获取当前记录的状态值和主键值,并且绑定类名为changeActive。

----------搞完了一身轻松

相关文章

网友评论

      本文标题:RBAC小结

      本文链接:https://www.haomeiwen.com/subject/guureftx.html