一 基本定义 权限核心定义RBAC( Role based access control)
二 权限设计流程
1 创建基本权限流程表
2 录入流程表相关数据
3 编写中间件进行流程验证
4 完成流程
三 权限相关表细节
1 权限表的设计三张表(用户表,角色表,相关权限表)
2 用户表本身存储用户密码,角色表存储组名称,权限表存储具体的url访问路径
3 用户表和角色表是多对多关系,也即是一个用户可能属于多个组,一个组可能拥有多个权限
四 权限细节补充
1 一个完整的url应该包含正则表达式,这点要牢记.常见于编辑和删除场景.录入的url要记得完全匹配访问url
2 多对多的字段名为关联model小写即可比如 roles=models.ManyToManyField(to="Role")
3 多对多对孩子类的查询推荐使用反向查询,类似 父母__key
五 录入数据
采用admin录入能加快速度
六 中间件
1 基础:我们要知道,任何访问都要经过中间件的处理.配置项在setting
2 基本定义
继承类 from django.utils.deprecation import MiddlewareMixin
预定义方法名->需要重写
process_request(self,request)
process_response(self, request, response)
以上方法的返回值可以是None或一个HttpResponse对象,如果是None,则继续按照django定义的规则向后继续执行,如果是HttpResponse对象,则直接将该对象返回给用户。
3 自定义中间件定义类重写上述方法即可
七 基本权限中间件流程
1 白名单验证机制->在setting中进行配置匹配
2 查询当前登录状态->检测用户ID
3 查询访问路径是否在权限列表中
4 判断完成
八 流程设计补充
1 流程顺序不能改变,可以采用re.search()进行匹配判断,因为url会包含正则
九 登录后的session处理
1 session存档用户ID
2 session存到用户权限列表
这两项中间件都需要进行验证用到
十 session基础知识补充
1 django_session表
session_key key
session_data value 这里存取的是我们自定义和已存在的相关数据,属于字典类型.例如下面的字典键值
session_date 过期时间
2 session本身是字典,django最常见的就是查询和赋值
3 django会默认为session使用json序列化。json序列化只能序列化一些基本数据类型,如数字,字符串,列表等
十一 总结
1 三部分 view 中间件 前端
2 三流程 读取权限和菜单 设置白名单 进行权限和对应菜单检查
转载于:https://www.cnblogs.com/danhuangpai/p/11017364.html