关于权限:

首先明确权限是为了限制其他访问的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. git开发中常用命令

    项目代码克隆岛本地 git clone 项目地址 #如:git clone http://cngit.fir.ai/data_service/distributedstorage.git 克隆指定分支 ...

  2. Linux性能优化实战学习笔记:第三十九讲

    一.上节回顾 上一节,我带你学习了 tcpdump 和 Wireshark 的使用方法,并通过几个案例,带你用这两个工具实际分析了网络的收发过程.碰到网络性能问题,不要忘记可以用 tcpdump 和W ...

  3. Java Web 之 SSM笔记

    好久没有写博文了呀呀呀........博客园的MarkDown还是...算了吧 自定义 Restful 风格结果集 参考资料 [SpringBoot专题]统一异常处理和统一数据返回前言实践运行结果 如 ...

  4. Computer-Hunters——冲刺总结

    Computer-Hunters--冲刺总结 一.作业相关 作业相关 具体描述 所属班级 2019秋福大软件工程实践Z班 作业要求 团队作业第五次-项目冲刺 作业正文 hunter--冲刺总结 团队名 ...

  5. Kubernetes Dashboard 安装与认证

    1.安装dashboard $ kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/ ...

  6. Java连载12-继承开发环境&long类型

    一.集成开发环境(Integrated Develop Environment,简称IDE) 1.什么是集成开发环境 (1)集成开发环境可以使软件开发变得更简单 (2)没有IDE工具: i.需要安装J ...

  7. python读写符号的含义

    r 打开只读文件,该文件必须存在. r+ 打开可读写的文件,该文件必须存在. w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失.若文件不存在则建立该文件. w+ 打开可读写文件,若文件 ...

  8. 论文阅读: Direct Monocular Odometry Using Points and Lines

    Direct Monocular Odometry Using Points and Lines Abstract 大多数VO都用点: 特征匹配 / 基于像素intensity的直接法关联. 我们做了 ...

  9. Leetcode 344:Reverse String 反转字符串(python、java)

    Leetcode 344:Reverse String 反转字符串 公众号:爱写bug Write a function that reverses a string. The input strin ...

  10. addpath(),genpath()

    clear all:clear clc: addpath(): 打开不在同一目录下的文件 addpath('sparse-coding');%sparse-coding,SIFT均表示路径,此目录下的 ...