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,基于角色的访问控制.用户通过角色与权限进行关联,一个用户可以有多个角色,一个角色可以有多 ...
随机推荐
- [LeetCode] 417. Pacific Atlantic Water Flow 太平洋大西洋水流
Given an m x n matrix of non-negative integers representing the height of each unit cell in a contin ...
- iphone 移动端操作记录
iPhone和Safari浏览器的后退按钮操作,是直接载入缓存中的页面,不会加载js文件,不会执行ready,onload函数,但是加载html页面会跑pageshow事件,因此有回退动作需要重新加载 ...
- Qt Quick 常用元素:Textinput 与 TextEdit 文本编辑框
一.Textinput Textinput 用于编辑一行文本,类似于 QLineEdit. font 分组属性允许你设置 Textlnput 元素所用字体的各种属性,包括字体族(family).大 小 ...
- pytorch_01_基础_一维线性回归
pytorch基础 pytorch官方文档:https://pytorch.org/docs/master/nn.html#linear-layers import torchfrom torch i ...
- Oracle体系结构学习笔记
Oracle体系结构由实例和一组数据文件组成,实例由SGA内存区,SGA意思是共享内存区,由share pool(共享池).data buffer(数据缓冲区).log buffer(日志缓冲区)组成 ...
- IOS手机 html5页面 数字变成蓝色链接的原因
IOS手机 html5页面 数字变成蓝色链接的原因 这个是ios手机自动识别 写如下代码 即可<pre> <meta name="format-detection" ...
- SQLAlchemy基础
1.介绍 做个简单笔记,方便回顾. SQLAlchemy是一个基于Python实现的ORM框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后 ...
- BCryptPasswordEncoder 判断密码是否相同
加密 BCryptPasswordEncoder encode = new BCryptPasswordEncoder(); encode.encode(password); 比较 matches(C ...
- json工具类(二)——google包
package com.ruoyi.common.utils.json; import java.util.List; import com.google.gson.Gson; import com. ...
- 【UOJ#32】【UR #2】跳蚤公路(最短路)
[UOJ#32][UR #2]跳蚤公路(最短路) 题面 UOJ 题解 不难发现要求的就是是否存在负环.也就是我们只需要找到所有的负的简单环,很容易就可以想到维护路径上和\(x\)相关的内容,即维护一下 ...