Было бы полезно, если бы вы опубликовали класс разрешений.
Но если оставить в стороне то, что вы опубликовали, похоже, что только пользователи-сотрудники могут иметь доступ к конечным точкам, привязанным к этому набору представлений.То есть никакой другой тип / роль пользователя не может получить доступ к этим конечным точкам
Отходя от вашего вопроса, кажется, что вы хотите установить разрешение IsOwnerOrStaffOrReadOnly и переопределить функцию списка маршрутизации ModelViewSet, а также заменить license_classes и затем вызвать super
class UsersViewSet(viewsets.ModelViewSet):
permission_classes = (IsOwnerOrStaffOrReadOnly,)
queryset = User.objects.all()
serializer_class = UserSerializer
def list(self, request, *arg, **kwargs):
self.permission_classes = (OnlyStaffCanReadList,)
super(UsersViewSet, self).list(request, *args, **kwargs) // python3 super().list(request, *args, **kwargs)
для объекта Owner.класс разрешений
class IsOwnerOrStaffOrReadOnly(permissions.BasePermission):
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
if request.user.role == 'staff':
return True
# Instance must have an attribute named `owner`.
return obj.owner == request.user
только сотрудники могут читать класс разрешений
class OnlyStaffCanReadList(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
if request.user.role == 'Staff':
return True
else:
return False
, как указано в комментариях, ваша пользовательская модель должна иметь роль владельца.если вы используете модель пользователя django, вы можете просто сделать obj.id == request.user.id
сравнение