django 权限设置

关于权限:html

首先明确权限是为了限制其余访问的url数据库

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

一.session

须要三个类五张表app

 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 
21 class Permission(models.Model): 22 
23     title = models.CharField(max_length=32) 24     url = models.CharField(max_length=32) 25     is_menu = models.BooleanField(default=False) 26     icon=models.CharField(max_length=32,null=True,blank=True) 27 
28     def __str__(self): 29         return self.title
models

二.ide

再经过admin来建立表的数据url

注意的是,为了方便显示各字段,能够建立类引用ModelAdmin来进行修饰spa

 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

三.code

建立好数据库后,须要在login上进行htm

验证登陆

保存用户登陆的状态信息写入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 
36         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 
 6 class PermissionMiddleWare(MiddlewareMixin):  7 
 8     def process_request(self,request):  9         print(1) 10         print("permission_list",request.session.get("permission_list")) 11         current_path = request.path 12 
13         # 设置白名单放行
14         for reg in  ["/login/","/admin/*"]: 15             ret=re.search(reg,current_path) 16             if ret: 17                 return None 18         # /customers/edit/1
19 
20         # 校验是否登陆
21 
22         user_id=request.session.get("user_id") 23         print("user_id",user_id) 24         if not user_id: 25             return redirect("/login/") 26 
27         # 校验权限
28 
29 
30         permission_list=request.session.get("permission_list") 31 
32         for reg in permission_list: 33              reg="^%s$"%reg 34              ret=re.search(reg,current_path) 35              if ret: 36                  return None 37 
38         return HttpResponse("无访问权限!")
中间件检验权限

 

这样初始的权限就完成了

相关文章
相关标签/搜索