Django權(quán)限控制的使用
自己搭建后臺網(wǎng)站,需求:實現(xiàn)類似django Admin站點對每一張表的增刪改查權(quán)限控制。
實現(xiàn)步驟:
1.權(quán)限控制Django框架已自帶,共6張表,User表,Group表,UserGroup表,Permission表,GroupPermission表,UserPermission表,一般情況下,使用默認即可。
2.若User表自定義,需繼承Django自帶AbstractUser類,Group表同理。
3.創(chuàng)建類PermissionControl繼承BasePermission,重寫has_permission和has_object_permission方法。
import re
from django.contrib.auth.models import AnonymousUser
from rest_framework.permissions import BasePermission
class PermissionControl(BasePermission):
"""自定義權(quán)限控制類"""
def has_permission(self, request, view):
# 0.若用戶未登陸直接訪問,返回未授權(quán)
if isinstance(request.user, AnonymousUser):
return False
permission_list = request.user.role.get_all_permissions()
# 1.角色管理-角色
if request.method == 'GET' and re.match(r'^/role_manage/roles/$', request.path):
if 'view_role' in permission_list:
return True
else:
return False
elif request.method == 'POST' and re.match(r'^/role_manage/roles/$', request.path):
if 'add_role' in permission_list:
return True
else:
return False
elif request.method == 'PUT' and re.match(r'^/role_manage/roles/\d+/$', request.path):
if 'change_role' in permission_list:
return True
else:
return False
elif request.method == 'PATCH' and re.match(r'^/role_manage/roles/\d+/$', request.path):
if 'change_role' in permission_list:
return True
else:
return False
elif request.method == 'DELETE' and re.match(r'^/role_manage/roles/\d+/$', request.path):
if 'delete_role' in permission_list:
return True
else:
return False
# 同理,判斷所有路由及權(quán)限
def has_object_permission(self, request, view, obj):
"""GET請求單個對象時執(zhí)行"""
# 0.若用戶未登陸直接訪問,返回未授權(quán)
if isinstance(request.user, AnonymousUser):
return False
permission_list = request.user.get_all_permissions()
# 1.角色管理-角色
if request.method == 'GET' and re.match(r'^/role_manage/roles/\d+/$', request.path):
if 'view_role' in permission_list:
return True
else:
return False
# 同理,判斷所有路由及權(quán)限
4.視圖中使用,本網(wǎng)站使用drf框架,僅需在要控制權(quán)限的類視圖中加上permission_classes權(quán)限控制即可。
class RoleViewSet(ModelViewSet): """ list: 查詢所有角色 read: 根據(jù)角色id,查詢角色 create: 創(chuàng)建角色 delete: 根據(jù)角色id,刪除角色 update: 根據(jù)角色id,更新角色信息 partial_update: 根據(jù)角色id,部分更新角色信息 """ queryset = Role.objects.filter(is_delete=0).all() serializer_class = RoleSerializer permission_classes = [PermissionControl] filterset_class = RoleFilter pagination_class = StandarPageNumberPagination
5.數(shù)據(jù)庫中組(角色)權(quán)限表需添加角色權(quán)限,如:

到此這篇關(guān)于Django權(quán)限控制的使用的文章就介紹到這了,更多相關(guān)Django權(quán)限控制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何利用Python開發(fā)一個簡單的猜數(shù)字游戲
這篇文章主要給大家介紹了關(guān)于如何利用Python開發(fā)一個簡單的猜數(shù)字游戲的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Python具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-09-09
python用10行代碼實現(xiàn)對黃色圖片的檢測功能
這篇文章主要介紹了python用10行代碼實現(xiàn)對黃色圖片的檢測功能,涉及Python基于圖片庫PIL對圖片的檢測技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-08-08
python實現(xiàn)的DES加密算法和3DES加密算法實例
這篇文章主要介紹了python實現(xiàn)的DES加密算法和3DES加密算法,以實例形式較為詳細的分析了DES加密算法和3DES加密算法的原理與實現(xiàn)技巧,需要的朋友可以參考下2015-06-06
pygame中blit()參數(shù)的使用及臟矩形動畫形成的說明
這篇文章主要介紹了pygame中blit()參數(shù)的使用及臟矩形動畫形成的說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03

