1. 程式人生 > 實用技巧 >DRF-自定義許可權

DRF-自定義許可權

rest_framework自帶的許可權

  • 引入
from rest_framework import permissions
  • permissions.AllowAny
    • 允許所有人訪問
  • permissions.IsAuthenticated
    • 僅允許登入的人員訪問
    • 判斷條件是request.user and request.user.is_authenticated
  • permissions.IsAdminUser
    • 僅允許管理員訪問
    • 判斷條件是request.user and request.user.is_staff
  • permissions.IsAuthenticatedOrReadOnly
    • 是登入的使用者,並且這個API是隻能讀的(也就是GET、OPTIONS、HEAD)

自定義許可權

  • 條件
    有時候drf自帶的許可權無法滿足要求,那麼我們可以自定義許可權。自定義許可權要遵循兩個條件:
    1、繼承自permissions.BasePermission
    2、 現has_permission(self,request,view)或者是has_object_permission(self, request, view, obj)方法。第一個方法用管理整個檢視的訪問許可權,第二個方法可以用來管理某個物件的訪問許可權(比如只能修改自己的使用者資訊)
  • 示例
from rest_framework import permissions
class IsOwnerOrReadOnly(permissions.BasePermission):
    # 只允許檢視使用者自己建立的資料
    def has_object_permission(self, request, view, obj):
        if request.method in permissions.SAFE_METHODS:
            return True
        return obj.owner == request.user
from rest_framework import permissions
class ShowPagePermissions(permissions.BasePermission):
    def has_permission(slef,request,view):
        if request.user.has_perm('app名.許可權標識'):
            return true
        else:
            return flase