rbac
Posted pythonz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rbac相关的知识,希望对你有一定的参考价值。
动态生成一级菜单:
model里修改字段为
在登录查询用户时,将四个字段的信息都查询出来
并根据用户能够访问的网页权限和显示的菜单 blank表示页面输入可以为空 null=true 表示数据表可以为空
分为权限列表和菜单列表
permission_list
menu_list
权限信息用来验证用户能够访问的页面
菜单列表用来显示用户可以访问的页面
页面可以接受request
request.session.menu来得到ur,title,icon显示在页面上可以用for循环实现
一级菜单优化
在页面request.session.menu是写死了
创建templatetags包
里面my_tags.py
通过sample.inclusion.tags方法
写一个menu函数,再创建一个menu页面menu.html
里面讲request.session.menu内容复制进去
再在原页面写{%load my_tags%}
{%menu request%}导入
给访问的菜单加active属性
在menu函数里
因为知道要访问的页面url request.path_info
循环菜单列表时
如果这个菜单的url和访问页面相同时 用正则进行判断 re.match(item[url],request.path_info):
里面 item[‘class‘]=active加入active属性
在页面用menu.class显示
rbac功能整合
功能整合就是将rbac的所有函数,页面,css都拖到自己的rbac的app里,使rbac独立起来可以随时调用
应用rbac组件的流程
1.将rbac app直接拷贝进来
在settings里注册rbac app
2 数据库的迁移
1删除rbac下migrations下除init外的其他py文件
2执行命令
3 录入权限信息 ,通过Django自带的admin页面
1.首先创建超级用户
python manage.py createsuperuser
2.登录admin
1.通过rbac里已经写完的角色,权限,用户信息
录入权限信息 角色信息 用户信息
2.分配对应的关系
4.登陆成功后调用权限初始化的函数permission
通过permission将用的权限信息放入权限列表 菜单信息放入菜单列表
from rbac.service.permission import init_permission
init_permission(request,obj) # 传入request和obj
5.在settings里注册权限的中间件
MIDDLEWARE = [
‘rbac.middlewares.rbac.RbacMidlleware‘
]
通过rbac的request进行权限的验证
并将权限相关的配置写入settings里
# 权限存放在session中的KEY
PERMISSION_SESSION_KEY = ‘permission‘
# 菜单存放在session中的KEY
MENU_SESSION_KEY = ‘menu‘
# 白名单
WHITE_LIST = [ r‘^/login/$‘,
r‘^/reg/$‘,
r‘^/admin/.*‘, ]
6.将动态菜单加入到页面中应用到inclusion_tag
{% load rbac %}
{% menu request %}
在页面里要导入菜单的静态文件
1.menu.css
有一个母版页面,通过这个母版进行加入
以上是关于rbac的主要内容,如果未能解决你的问题,请参考以下文章
k8s学习-基于角色的权限控制RBAC(概念,模版,创建,删除等)