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