关于权限:

首先明确权限是为了限制其他访问的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 权限设置的更多相关文章

  1. django 权限设置-菜单显示

    问题:在用户登录后,如何只显示出用户权限的菜单呢?需要设置显示菜单权限 1.为了显示菜单,需要在models权限上添加is_menu(手动判断是否是查看)的icon(图标字符串) 在rbac中录入另一 ...

  2. django 权限设置-登录配置权限

    1.首先需要一个判断用户是否拥有这个权限的name来区分在主页上是否显示标签 在permission中加入 name=models.CharField(max_length=32, verbose_n ...

  3. django 权限设置 左侧菜单点击显示,面包屑

    1.左侧菜单点击显示 就是在点击的时候保留点击的功能 方法. 1.加入新的字段,pid来判断 class Permission(models.Model): """ 权限 ...

  4. [Python学习] Django 权限控制

    本文为大家讲解 Django 框架里自带的权限模型,从理论到实战演练,带领大家了解 Django 里权限是怎么一回事. 一.主要内容 1.什么是权限管理? 2.Web 权限 3.Django 权限机制 ...

  5. django(权限、认证)系统——第三方组件实现Object级别权限控制

    在我的系列blog<Django中内置的权限控制>中明确提及到,Django默认并没有提供对Object级别的权限控制,而只是在架构上留了口子.在这篇blog中,我们探讨一个简单流行的Dj ...

  6. django(权限、认证)系统—— 基于Authentication backends定制

    在这篇文章中,我们进行最后关于DjangoPermission系统的探讨,来谈谈关于Permission系统后台接口和扩展后台接口的开发. Django实现的这套permission体系,在底层被抽象 ...

  7. django(权限、认证)系统—— Permissions和Group

    接着上面的3篇讨论文章,我们阐述了Django中如何使用Authentication系统进行,用户的创建,登陆,登出,完成了用户的认证.接下来,我们要看另外一个议题,那就是Authorization授 ...

  8. django权限管理(Permission)

    什么是权限管理 权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自 己被授权的资源 权限管理好比如钥匙,有了钥匙就能把门打开,但是权限设置是有级别之分的,假如这个 系统有多 ...

  9. django权限管理(一)

    权限:权限就是一个包含正则的url. Rbac 权限管理: Role-Based Access Control,基于角色的访问控制.用户通过角色与权限进行关联,一个用户可以有多个角色,一个角色可以有多 ...

随机推荐

  1. nowcoder911L 最优子区间

    题目链接 思路 用\(f(i,j)\)表示前i个元素,以i为右端点,j为左端点时的答案. 用个"区间修改,单点查询"的线段树维护出第二维.在从左往右枚举i的过程中.将\([lst_ ...

  2. 【Arch安装】

    [Arch安装]不完整,凭记忆补充 1,制作安装介质(请跳转链接:https://www.archlinux.org/download/) 2,从UEFI模式启动后,按照官方WIKI向导操作(http ...

  3. TextView实现文字水平滚动效果

    有时候我们使用TextView显示文本,只想把所有内容用一行显示出来,但是一行又显示不完,就需要让文本实现水平滚动的效果. 具体实现方法如下: 1,实现自定义TextView并实现isFocused( ...

  4. Java 并发系列之八:java 并发工具(4个)

    1. CountDownLatch 2. CyclicBarrier 3. Semaphore 4. Exchanger 5. txt java 并发工具 通俗理解 CountDownLatch 等A ...

  5. go-gin-api 路由中间件 - 捕获异常

    概述 首先同步下项目概况: 上篇文章分享了,路由中间件 - 日志记录,这篇文章咱们分享:路由中间件 - 捕获异常. 当系统发生异常时,提示 “系统异常,请联系管理员!”,并发送 panic 告警邮件. ...

  6. go-gin-api 路由中间件 - 签名验证(七)

    概览 首先同步下项目概况: 上篇文章分享了,路由中间件 - Jaeger 链路追踪(实战篇),文章反响真是出乎意料, 「Go中国」 公众号也转发了,有很多朋友加我好友交流,直呼我大神,其实我哪是什么大 ...

  7. SpringBoot整合SpringDataJPA及在页面yaml中显示

    SpringBoot整合SpringDataJPA及在页面yaml中显示 1:创建对应的数据表 2:添加依赖 3:配置数据源 1:创建对应的数据表 CREATE TABLE `user` ( `id` ...

  8. Nginx 变量参数

    $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有参数,值为"?",否则为 ...

  9. Java8 LocalDateTime和Date相互转换

    很想要用Java的时间api,但有时候还是需要转换为Date. 二者的相互转换并不是一步到位那么简单,所以,还是需要记录一下转换的api Date to LocalDateTime Date toda ...

  10. 集合类源码(三)Collection之List(CopyOnWriteArrayList, Stack)

    CopyOnWriteArrayList 功能 全名 public class CopyOnWriteArrayList<E> implements List<E>, Rand ...