原理:
1、简单管理
2、角色多管理(就要设置权限)
a. 登录
- session中放置用户信息(检测是否已经登录)
- session中放置权限信息(检测是否有权访问)
{
"/index.html":[get,delete,select ,update],
"/order.html":[get,delete,select ,update],
}
- session中放置菜单,权限信息(用于生成多级的动态菜单)。就不用每次在数据库里面去取数据了
b. 访问网站其他功能:http://www.baidu.com/xxx.html
- 获取当前访问的url,request.path_info
-
匹配/xxx.html?md=get
根session里面的权限信息进行匹配(检测是否有权访问)
{
"/index.html":[get,delete,select ,update],
"/order.html":[get,delete,select ,update],
"/xxx.html":[get,delete,select ,update],
}
如果匹配成功之后,在进行一次匹配
第一次匹配的是url,第二次匹配的是方法
request.permission_code = "get"
request.permission_code = [get,delete]
目的是传到视图函数,当视图函数写业务逻辑的时候根据这两个值来判定视图该怎么写
ps:两次匹配的时候都是用中间件来实现的
c.在视图中:
得到这两个值,
request.permission_code = "get" #业务逻辑的增加,修改等
request.permission_code = [get,delete] #为了给前端显示功能按钮
e.创建动态菜单【多级菜单】
- 当前用户的权限(从数据库获取,但是这样每次请求数据库效率不高,可以放置在session中)
- 所有的菜单 (从数据库获取)
- 让权限和菜单实现挂靠
这个菜单只是在页面上使用,推荐用simple_tag来用
1、权限挂到菜单上
2、菜单父子关系处理
3、递归生成菜单
辅助:
css
js
基本使用:
1、导入rbac
- 表
- 中间件
- service 初始化操作
- simple_tag
2、注册app
3、用户登录
初始化权限信息:service.init_permission(request,user_id)
本质就是吧权限的信息和菜单的信息放在session中
4、在settings中配置中间件
5、导入{% rbac_menu request %}
其他配置
....