crm项目权限组件

###############    表结构分析     ################

"""
表结构设计:
1,四张表
用户表,userinfo,这个表本身不会被创建,而是用来被真正的用户表做继承,
角色表,role,
菜单表,menu,
权限表,permission,

2,关联关系 用户表和角色表多对多关联, 角色表和权限表多对多关联, 权限表和菜单表一对多关联,
"""

###############    提供的操作     ################ 

"""

提供的操作
1,角色添加,只是菜单添加,


2,菜单添加,
添加一级菜单,这是在菜单表中保存的
添加二级菜单,如果权限表关联了菜单表,就是菜单,没有关联就不是菜单,
添加菜单权限,对于非二级菜单的需要关联是二级菜单的id,用来展开权限,这个设计可以把权限控制到按钮级别,
这种是在建立菜单和权限的关系,


3,分配权限,可以为客户分配角色,为角色分配权限,
这种其实就是建立员工和角色,角色和菜单之间的关联关系,都是多对多的,
这个分配的角色就是角色页面建立的,
这个分配权限就是菜单页面创建的,
另外用户可以绑定角色,


"""

  

###############    权限初始化     ################

"""

权限初始化
1,在登陆的时候,把菜单和权限拿出来,然后放入session里面去,

2,这一步涉及到了django session的操作,
原理就是客户端保存cookie  格式是  sessionid :sessionkey
sessionkey是自动生成的
sessionkkey会保持在服务器端,然后对应的有sessiondata,
这种数据在服务端,会比较安全,

"""

  

###############    权限组件     ################

"""

权限校验
1,使用中间件来校验权限,这样每一个进来的url都会经过中间件

2,逻辑就是获取当前访问的url,然后取出初始化中保存到session中的url,看看是否匹配到,匹配到就是有权限的,

3,settings.VALID_URL_LIST,
白名单中的URL无需权限验证即可访问

4,settings.NO_PERMISSION_LIST
需要登录,但无需权限校验,

"""

###############    权限组件     ################

"""
权限初始化

在登陆的时候做权限初始化,这个权限初始化做了什么?
需要传递两个参数,user和request,user是当前用户,request是请求相关的所有信息
user是一个对象,user = models.UserInfo.objects.filter(name=user, password=pwd).first()
做了两个事情: 1,根据这个用户获取到他所有的权限,并且放入session,settings.PERMISSION_SESSION_KEY 2,把菜单和权限,放入session,settings.MENU_SESSION_KEY
"""

###############    权限组件     ################

 

原文地址:https://www.cnblogs.com/andy0816/p/12157023.html