django 权限设置
关于权限:
首先明确权限是为了限制其他访问的url
通过在models使之关联的表再通过关联表的权限来permissions的url 来检测url的访问
一.
需要三个类五张表
from django.db import models # Create your models here.
class User(models.Model): name=models.CharField(max_length=32)
roles=models.ManyToManyField("Role") def __str__(self):
return self.name class Role(models.Model): title=models.CharField(max_length=32)
permissions=models.ManyToManyField("Permission") def __str__(self):
return self.title class Permission(models.Model): title = models.CharField(max_length=32)
url = models.CharField(max_length=32)
is_menu = models.BooleanField(default=False)
icon=models.CharField(max_length=32,null=True,blank=True) def __str__(self):
return self.title
models
二.
再通过admin来创建表的数据
注意的是,为了方便显示各字段,可以创建类引用ModelAdmin来进行修饰
from django.contrib import admin from app01.models import User,Role,Permission # Register your models here.
admin.site.register(User)
class RoleConfig(admin.ModelAdmin):
list_display = ["title"] admin.site.register(Role,RoleConfig) class PermissionConfig(admin.ModelAdmin):
list_display = ["title","pk","url","is_menu","icon"]
# list_editable = ['url', 'is_menu', 'icon'] admin.site.register(Permission,PermissionConfig)
admin
三.
创建好数据库后,需要在login上进行
验证登录
保存用户登录的状态信息写入session中(确认在登录)
查询当前登录人的权限列表
将权限列表写入session中
def login(request):
if request.method=="POST":
# 认证
user=request.POST.get("user")
user=User.objects.filter(name=user).first()
if user:
# 登录成功
# 保存登录用户状态信息
request.session["user_id"]=user.pk
# 查询当前登录人的所有权限列表
# 查看当前登录人的所有角色
# ret=Role.objects.filter(user=user)
permissions=Role.objects.filter(user=user).values("permissions__url").distinct()
print(permissions)
permission_list=[]
for item in permissions:
permission_list.append(item["permissions__url"])
# 将当前登录人的权限列表注入session中
request.session["permission_list"]=permission_list
return HttpResponse("登录成功")
else:
val="HAPPY"
n=12
return render(request,'login.html',locals())
login录入session权限
四.
通过中间件的形式来验证用户的使用权限
设置白名单
检验是否登录
校验权限
from django.utils.deprecation import MiddlewareMixin
from django.shortcuts import HttpResponse,redirect
import re class PermissionMiddleWare(MiddlewareMixin): def process_request(self,request):
print(1)
print("permission_list",request.session.get("permission_list"))
current_path = request.path # 设置白名单放行
for reg in ["/login/","/admin/*"]:
ret=re.search(reg,current_path)
if ret:
return None
# /customers/edit/1 # 校验是否登录 user_id=request.session.get("user_id")
print("user_id",user_id)
if not user_id:
return redirect("/login/") # 校验权限 permission_list=request.session.get("permission_list") for reg in permission_list:
reg="^%s$"%reg
ret=re.search(reg,current_path)
if ret:
return None return HttpResponse("无访问权限!")
中间件检验权限
这样初始的权限就完成了
django 权限设置的更多相关文章
- django 权限设置-菜单显示
问题:在用户登录后,如何只显示出用户权限的菜单呢?需要设置显示菜单权限 1.为了显示菜单,需要在models权限上添加is_menu(手动判断是否是查看)的icon(图标字符串) 在rbac中录入另一 ...
- django 权限设置-登录配置权限
1.首先需要一个判断用户是否拥有这个权限的name来区分在主页上是否显示标签 在permission中加入 name=models.CharField(max_length=32, verbose_n ...
- django 权限设置 左侧菜单点击显示,面包屑
1.左侧菜单点击显示 就是在点击的时候保留点击的功能 方法. 1.加入新的字段,pid来判断 class Permission(models.Model): """ 权限 ...
- [Python学习] Django 权限控制
本文为大家讲解 Django 框架里自带的权限模型,从理论到实战演练,带领大家了解 Django 里权限是怎么一回事. 一.主要内容 1.什么是权限管理? 2.Web 权限 3.Django 权限机制 ...
- django(权限、认证)系统——第三方组件实现Object级别权限控制
在我的系列blog<Django中内置的权限控制>中明确提及到,Django默认并没有提供对Object级别的权限控制,而只是在架构上留了口子.在这篇blog中,我们探讨一个简单流行的Dj ...
- django(权限、认证)系统—— 基于Authentication backends定制
在这篇文章中,我们进行最后关于DjangoPermission系统的探讨,来谈谈关于Permission系统后台接口和扩展后台接口的开发. Django实现的这套permission体系,在底层被抽象 ...
- django(权限、认证)系统—— Permissions和Group
接着上面的3篇讨论文章,我们阐述了Django中如何使用Authentication系统进行,用户的创建,登陆,登出,完成了用户的认证.接下来,我们要看另外一个议题,那就是Authorization授 ...
- django权限管理(Permission)
什么是权限管理 权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自 己被授权的资源 权限管理好比如钥匙,有了钥匙就能把门打开,但是权限设置是有级别之分的,假如这个 系统有多 ...
- django权限管理(一)
权限:权限就是一个包含正则的url. Rbac 权限管理: Role-Based Access Control,基于角色的访问控制.用户通过角色与权限进行关联,一个用户可以有多个角色,一个角色可以有多 ...
随机推荐
- 【2019.7.15 NOIP模拟赛 T1】夹缝(mirror)(思维题)
思维题 此题应该是比较偏思维的. 假设一次反射后前进的距离是\(2^x(2y+1)\),则显然,它可以看做是前进距离为\(2^x\)的光线经过了\((2y+1)\)次反射,两者是等价的,甚至后者可能还 ...
- CF717A Festival Organization(第一类斯特林数,斐波那契数列)
题目大意:求 $\sum\limits_{n=l}^{r}\dbinom{f_n}{k}\bmod 10^9+7$.其中 $f_n$ 是长度为 $n$ 的 $01$ 序列中,没有连续两个或超过两个 $ ...
- [LeetCode] 63. Unique Paths II 不同的路径之二
A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagram below). The ...
- css设置不可复制
-moz-user-select:none; /* Firefox私有属性 */ -webkit-user-select:none; /* WebKit内核私有属性 */ -ms-user-selec ...
- 实现100以内的素数输出(Python与C++对比)
今天从链接http://www.2cto.com/kf/201302/187699.html中看到了Python实现100以内的素数输出的算法,颇受感触.尤其是被其中的Python的列表生成器的使用方 ...
- 【08月07日】A股滚动市盈率PE最低排名
仅根据最新的市盈率计算公式进行排名,无法对未来的业绩做出预测. 方大集团(SZ000055) - 滚动市盈率PE:2.32 - 滚动市净率PB:1.04 - 滚动年化股息收益率:4.37% - 建筑 ...
- root账号无法上传文件到Linux服务器
普通权限的账号,通过ftp工具,可以正常连上Linux服务器,可以正常上传文件.但是root账号却无法上传文件. 网上搜了半天才知道,默认情况下vsftp是不允许root用户登录的,可以通过修改限制来 ...
- 关于stm32f10x_conf.h文件
简介 stm32f10x_conf.h文件有2个作用:①提供对assert_param运行时参数检查宏函数的定义.②将开发者用到的标准外设头文件集中在这个文件里面,而stm32f10x_conf.h又 ...
- Redis(二)特性和学习路线
Redis是高效的内存数据库或者说缓存.对多种数据结构都支持,每种数据结构都有相应的应用场景. 特性 Redis支持非常多的特性,从用途.性能.高可用.数据安全方面都提供了相应的支持和保障. Redi ...
- PIE SDK归一化水体指数法
1.算法功能简介 归一化指数法(NDWI(Normalized Difference Water Index,归一化水指数)),用遥感影像的特定波段进行归一化差值处理,以凸显影像中的水体信息. 其表达 ...