三张表来总结后台:用户表 角色表 权限表
注册后台登陆用户选择对应角色,角色表中 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。
----------搞完了一身轻松
网友评论