Django-rbac权限
1、注册应用rbac


2、设计表
权限表
角色表
用户表
不同角色有不同的权限,给每个用户分配不同的角色(一个用户可以有多个角色)
3、数据注入
将数据注入在rbac中封装成一个函数
4、权限认证是在中间件进行的
我们将中间件也写在组件内
在settings注册中间件:

5、settings中配置我们经常用到的变量


6、配置路由分发

6、菜单栏权限分配

创建菜单表
菜单与权限一对多关联
表结构如下:
菜单表:

权限表:

给这些url分配菜单,哪个url属于哪些菜单,后面的pid是为了表示从属关系,
7、权限注入
登录成功后将用户的所有权限和权限中是菜单的信息保存在session中
取出当前登录用户拥有的所有权限,根据权限表中的menu_id判断哪些权限属于一级菜单;
构建菜单的数据结构,方便前端渲染;
所有权限保存在一个变量中保存到session中;
菜单权限保存在一个变量中保存到session中;
# 判断是否是一级菜单
if item["menu_id"]:
# 如果menu_id在权限列表中,表示已经存在二级菜单,
if item["menu_id"] in permisson_is_menu_dict:
permisson_is_menu_dict[item["menu_id"]]["children"].append({
"pk":item["pk"],"title": item["title"], "url": item["url"]
})
else:
# 设计菜单栏数据结构(方便前端渲染)
permisson_is_menu_dict[item["menu_id"]] = {
"title": item["menu__title"],
"icon": item["menu__icon"],
"children": [
{ "pk":item["pk"],"title": item["title"], "url": item["url"]},
]
}
8、权限认证
权限认证在中间件中,因为每访问一个网页都需要走一遍中间件
取出保存在session中的当前登录用户的权限数据与当前请求的url进行匹配
# 权限认证
for item in request.session[settings.PERMISSION_LIST]:
res = "^%s$"%item
ret = re.search(res,request.path)
if ret:
return None
return HttpResponse("您的权限不够不能访问该页面!!!")
9、菜单栏渲染
通过自定义标签给页面渲染菜单
取出我们在登陆后保存在session中的菜单数据
import re
from django import template
from django.conf import settings
register = template.Library() # 自定义标签
@register.inclusion_tag("result.html")
def create_label(request):
menu_dict = request.session.get(settings.PERMISSION_MENU_DICT)
for key, item in menu_dict.items():
# 默认给二级标签添加隐藏样式
item["class"] = "hide"
for child in item["children"]:
# if re.match("^{}$".format(child["url"]), request.path):
# 当前访问路径的pid如果等于它二级菜单的id证明他俩是属于同一个一级菜单,
# 如果是属于同一个一级菜单,我们就让这个二级菜单一直显示,并给它添加选中样式;
# request.show_id是当前请求路径的id值,我们在中间件中将当前请求路径的id封装在了request中
if request.show_id == child["pk"]:
item["class"] = ""
child["class"] = "active"
break
return {"menu_dict" :menu_dict }
Django-rbac权限的更多相关文章
- Django RBAC用户权限设计方案
RBAC基于用户权限系统设置方案 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干 ...
- CRM项目之RBAC权限组件-day26
写在前面 上课第26天,打卡: 世间安得双全法 不负如来不负卿 s17day26 CRM项目 项目概要:XX公司CRM - 权限管理,公共组件,app ***** - 熟悉增删改查,Low *** - ...
- 基于RBAC权限验证, 中间价middleware实现, views 登录视图代码
废话不多说 上代码: 基础实现: rom django.shortcuts import HttpResponse, redirect, render from django.http import ...
- rbac权限组件整合到实际项目的全过程详述
rbac简介 项目的GitHub地址 欢迎Download&Fork&Star:https://github.com/Wanghongw/CombineRbac 另外,本文只简单介绍一 ...
- 22-1 rbac权限设计
一 表结构设计 from django.db import models # Create your models here. from django.db import models # Creat ...
- rbac权限+中间件 初识
rbac权限+中间件 1.权限组件rbac 1.什么是权限 1 项目与应用 2 什么是权限? 一个包含正则表达式url就是一个权限 who what how ---------->True or ...
- RBAC权限分配
RABC:基于角色的权限访问控制(Role-Based Access Control) 一般在登录系统认证通过后,会先确定的该用户的操作权限,判断用户的后续操作是否合法! RABC至少需要三张表:用户 ...
- RBAC权限管理
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联. 简单地说,一个用户拥有若干角色,每一个角色拥有若干权限. 这样,就构造成“用户-角 ...
- phpcms中的RBAC权限系统
PHPCMS中的RBAC权限系统主要用到了4张数据表:管理员表,角色表,菜单表,菜单权限表.先来看看数据库的数据表结构: admin 管理员表 ID 字段 类型 Null 默认 索引 额外 注释 1 ...
- yii2 rbac权限控制详细操作步骤
作者:白狼 出处:http://www.manks.top/article/yii2_rbac_description本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出 ...
随机推荐
- 深入理解计算机系统 第十一章 网络编程 part1 第二遍
客户端-服务器编程模型 每个网络应用都是基于客户端-服务器模型的.采用这个模型,一个应用是由一个服务器进程和一个或者多个客户端进程组成.服务器管理某种资源,并且通过操作这种资源来为它的客户端提供某种服 ...
- Eclipse怎么升级版本
java工程上右键——选择Properties——Project Faces——右边java项选择相应的版本就OK了
- [转载]VS2005的工程用VS2010打开后,用VS2005不能打开的解决方法
首先,在“项目”菜单里,把项目属性“目标平台”改为框架2.0,保存退出. 然后,用记事本或用编辑文本文件的方式打开你的项目文件,后缀为.sln 第一行:把“Microsoft Visual Studi ...
- Hive SQL查询效率提升之Analyze方案的实施
0.简介 Analyze,分析表(也称为计算统计信息)是一种内置的Hive操作,可以执行该操作来收集表上的元数据信息.这可以极大的改善表上的查询时间,因为它收集构成表中数据的行计数,文件计数和文件大小 ...
- 09 Python之IO多路复用
四种常见IO模型 阻塞IO(blocking IO).非阻塞IO(nonblocking IO).IO多路复用(IOmultiplexing).异步IO(asynchronous IO) IO发生时涉 ...
- 解决vs code编写python输出中文乱码问题
环境: win7 vscode 1.37.0 插件: python Code Runner 乱码问题: 创建一个python文件,运行如下代码,打印显示乱码.: 解决乱码步骤: Ctrl+Shift+ ...
- TVM使用问题记录
1.numpy提示repeat错误 错误信息为 One method of fixing this is to repeatedly uninstall numpy until none is fou ...
- GitLab端口冲突 解决办法
访问gitlab,出现:502 GitLab在使用的过程中,会开启80端口,如果80端口被其他的应用程序占用,则GitLab的该项服务不能使用,所以访问GitLab会失败.大多数皆是此问题. ...
- 执行sudo pip3 ...报错 Traceback (most recent call last): File "/usr/bin/pip3", line 9, in <module> from pip import main ImportError: cannot import name 'main'
对于普通pip,把pip3改成pip即可,其他的修改一样 1.执行命令 sudo gedit /usr/bin/pip3 2.改成下面的形式 from pip import __main__ # 需要 ...
- adb常见命令
adb(Android Debug Bridge)主要存放在sdk安装目录下的platform-tools文件夹中,他是一个非常强大的命令行工具.学习adb命令是我在从事兼职测试工作的时候需要掌握 ...