一 基本定义 权限核心定义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 三流程 读取权限和菜单 设置白名单 进行权限和对应菜单检查