1. 程式人生 > >django 許可權設定

django 許可權設定

關於許可權:

首先明確許可權是為了限制其他訪問的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 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

二.

再通過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 
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("無訪問許可權!")
中介軟體檢驗許可權

 

這樣初始的許可權就完成了