|
- from rest_framework import permissions
-
-
- class IsOwnerOrReadOnly(permissions.IsAuthenticatedOrReadOnly):
- """
- Object-level permission to only allow owners of an object to edit it.
- Assumes the model instance has an `owner` attribute.
- """
- def __init__(self, owner_field_name="owner"):
- self.__owner_field_name = owner_field_name
-
- def __call__(self):
- return self
-
- def has_object_permission(self, request, view, obj):
- # Read permissions are allowed to any request,
- # so we'll always allow GET, HEAD or OPTIONS requests.
- if request.method in permissions.SAFE_METHODS:
- return True
-
- return getattr(obj, self.__owner_field_name) == request.user
-
-
- class OwnerOnly(permissions.IsAuthenticatedOrReadOnly):
-
- def has_permission(self, request, view):
- return request.user.is_authenticated()
-
- def has_object_permission(self, request, view, obj):
- return obj.owner == request.user
-
-
- class SuperUserOnly(permissions.BasePermission):
- """
- The request is authenticated as a user, or is a read-only request.
- """
-
- def has_permission(self, request, view):
- return request.user.is_superuser
-
- def has_object_permission(self, request, view, obj):
- return request.user.is_superuser
|