1月22日学习内容整理:权限系统整理
1. 权限系统的实现?
- 目标就是实现一个权限的组件,以后再写任何系统时候可以直接使用。
- 用户登录成功后,将权限信息放入session,以后用户再次登录,获取用户url和session中的权限在中间件(process_request) 中进行匹配。
- 中间件:
1. 有几个方法?
- process_request
- process_response
- prccess_view
- process_exception
- process_template.... ,视图函数返回的对象:render方法
class Foo(object):
def __init__(self,msg):
self.msg = msg
def render(self):
#
return HttpResponse(self.msg)
def users(request):
return Foo('欢迎登陆')
2. 返回值
- 表结构设计?
- 不会
- 设计:权限、用户,问题:用户使用,分配同类用户权限时麻烦
- 角色表:多对多,可能存在临时项目组
- 粒度到按钮: code和权限组
1.URL级别的权限:主要用到了session,中间件,把用户的权限信息构建出一个数据结构,把这个结构传给session保存,每次不同的URL来首先要经过中间件的检测,中间件函数从session中提取权限信息进行比对,如果不是所属权限就直接截断
2.按钮级别的权限
因为我们不能在模版文件渲染时一个个的对URL权限地址进行判断,这样非常麻烦,
所以我们想到给每一个权限添加一个代号的字段code,并且把某一些相关的权限分为一个组,这样把一个人的权限包括权限组信息,每个权限组又包含权限代号信息,这样去构建出一个数据结构,同样保存到session中,视图函数从session中提取出这个数据结构,模版在渲染时只需要对权限代号进行判断就可以了,
接下来我们就要考虑可以把这些判断利用面向对象封装起来会简便一点
3. 动态生成菜单
简单程序:模板+js 菜单展开和收缩问题:效果会滞后
复杂程序:如何实现
menu_dict = {
1:{
'title':'菜单一',
'active':True,
'children':[
{'title':'权限一','url':'/xxxxx/','active':False},
{'title':'权限二','url':'/xxxxx/','active':True},
]
},
2:{
'title':'菜单二',
'active':True,
'children':[
{'title':'权限三','url':'/xxxxx/','active':False},
{'title':'权限四','url':'/xxxxx/','active':True},
]
}
}
菜单一:
权限1
权限2
菜单二:
权限3
权限4
从数据库获取菜单信息:
问题:
a. 由于之前一个组内的可以成为菜单的权限太少了,所以对组再进行进一步的划分(某几个组归属到一个菜单中),以后
页面显示时
菜单
权限
权限
权限
=》 创建菜单表
b. 对那些不能成为菜单的权限,归属一个 权限 。
=》创建了一个自关联的字段
- null,表示可以在菜单中显示
- 1
为模板语言自定义方法
inlusion_tag
规则:
a. 在任意已经注册的app中,创建一个 templatetags 的目录
b. 创建任意 py文件
c. 创建一个Libiary的对象,且对象的名称叫 register

浙公网安备 33010602011771号