关于权限:

首先明确权限是为了限制其他访问的url

通过在models使之关联的表再通过关联表的权限来permissions的url 来检测url的访问

一.

需要三个类五张表

  1. from django.db import models
  2.  
  3. # Create your models here.
  4. class User(models.Model):
  5.  
  6. name=models.CharField(max_length=32)
  7. roles=models.ManyToManyField("Role")
  8.  
  9. def __str__(self):
  10. return self.name
  11.  
  12. class Role(models.Model):
  13.  
  14. title=models.CharField(max_length=32)
  15. permissions=models.ManyToManyField("Permission")
  16.  
  17. def __str__(self):
  18. return self.title
  19.  
  20. class Permission(models.Model):
  21.  
  22. title = models.CharField(max_length=32)
  23. url = models.CharField(max_length=32)
  24. is_menu = models.BooleanField(default=False)
  25. icon=models.CharField(max_length=32,null=True,blank=True)
  26.  
  27. def __str__(self):
  28. return self.title

models

二.

再通过admin来创建表的数据

注意的是,为了方便显示各字段,可以创建类引用ModelAdmin来进行修饰

  1. from django.contrib import admin
  2.  
  3. from app01.models import User,Role,Permission
  4.  
  5. # Register your models here.
  6. admin.site.register(User)
  7. class RoleConfig(admin.ModelAdmin):
  8. list_display = ["title"]
  9.  
  10. admin.site.register(Role,RoleConfig)
  11.  
  12. class PermissionConfig(admin.ModelAdmin):
  13. list_display = ["title","pk","url","is_menu","icon"]
  14. # list_editable = ['url', 'is_menu', 'icon']
  15.  
  16. admin.site.register(Permission,PermissionConfig)

admin

三.

创建好数据库后,需要在login上进行

验证登录

保存用户登录的状态信息写入session中(确认在登录)

查询当前登录人的权限列表

将权限列表写入session中

  1. def login(request):
  2.  
  3. if request.method=="POST":
  4. # 认证
  5.  
  6. user=request.POST.get("user")
  7.  
  8. user=User.objects.filter(name=user).first()
  9. if user:
  10. # 登录成功
  11.  
  12. # 保存登录用户状态信息
  13.  
  14. request.session["user_id"]=user.pk
  15.  
  16. # 查询当前登录人的所有权限列表
  17. # 查看当前登录人的所有角色
  18. # ret=Role.objects.filter(user=user)
  19.  
  20. permissions=Role.objects.filter(user=user).values("permissions__url").distinct()
  21. print(permissions)
  22.  
  23. permission_list=[]
  24. for item in permissions:
  25. permission_list.append(item["permissions__url"])
  26.  
  27. # 将当前登录人的权限列表注入session中
  28. request.session["permission_list"]=permission_list
  29.  
  30. return HttpResponse("登录成功")
  31. else:
  32. val="HAPPY"
  33. n=12
  34.  
  35. return render(request,'login.html',locals())

login录入session权限

四.

通过中间件的形式来验证用户的使用权限

设置白名单

检验是否登录

校验权限

  1. from django.utils.deprecation import MiddlewareMixin
  2. from django.shortcuts import HttpResponse,redirect
  3. import re
  4.  
  5. class PermissionMiddleWare(MiddlewareMixin):
  6.  
  7. def process_request(self,request):
  8. print(1)
  9. print("permission_list",request.session.get("permission_list"))
  10. current_path = request.path
  11.  
  12. # 设置白名单放行
  13. for reg in ["/login/","/admin/*"]:
  14. ret=re.search(reg,current_path)
  15. if ret:
  16. return None
  17. # /customers/edit/1
  18.  
  19. # 校验是否登录
  20.  
  21. user_id=request.session.get("user_id")
  22. print("user_id",user_id)
  23. if not user_id:
  24. return redirect("/login/")
  25.  
  26. # 校验权限
  27.  
  28. permission_list=request.session.get("permission_list")
  29.  
  30. for reg in permission_list:
  31. reg="^%s$"%reg
  32. ret=re.search(reg,current_path)
  33. if ret:
  34. return None
  35.  
  36. 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. thinkphp5.0 - 安装

    1.thinkphp 5.0 可以通过下载,git 等方式安装,我这里采用下载完整版安装,解压到一个目录下就行了 2.配置 web 服务器配置文件,我是用的是 nginx(nginx/1.9.15) ...

  2. linux操作记录

    cd ~ 是返回根目录cd .. 跳转到上一页cd 目录 是跳转到目录文件 php -i | grep php.ini  是查看php.ini在哪个文件 vi 是查看文件内容,:i 是编辑文件内容 : ...

  3. SpringBoot集成Spring Security(3)——异常处理

    源码地址:https://github.com/jitwxs/blog_sample 文章目录 一.常见异常二.源码分析三.处理异常不知道你有没有注意到,当我们登陆失败时候,Spring securi ...

  4. 剑指offer:对称的二叉树

    题目描述: 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 思路分析: 二叉树的镜像就是左右相反,对称二叉树即镜像相等.利用一个递归函数 ...

  5. 剑指offer:剪绳子

    题目描述: 给你一根长度为n的绳子,请把绳子剪成m段(m.n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m].请问k[0]xk[1]x...xk[m]可 ...

  6. EFCore代码实践

    参考:https://www.cnblogs.com/Wddpct/p/6835574.html 控制台程序依赖注入参考:https://www.cnblogs.com/Wddpct/p/721920 ...

  7. Linux下Maven私服Nexus3.x环境构建操作记录

    原文地址:https://blog.csdn.net/liupeifeng3514/article/details/79553747 私服介绍 私服是指私有服务器,是架设在局域网的一种特殊的远程仓库, ...

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

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

  9. Beta冲刺(9/7)——2019.5.31

    作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Beta冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 队 ...

  10. java识别死亡或者存活的对象

    那些内存需要回收 内存回收是对运行时内存区域的内存回收,其中程序计数器.虚拟机栈.本地方法栈3个区域随线程而生,随线程而灭:栈中的栈帧随着方法的进入和退出而有条不紊的执行着出栈和入栈操作.每一个栈帧中 ...