如果您发布权限类会有所帮助。
但是根据您发布的内容,似乎只有员工用户才能访问绑定到该视图集的端点。这意味着没有其他用户类型/角色可以访问这些端点。
解决您的问题,您似乎想设置 IsOwnerOrStaffOrReadOnly 权限并覆盖 ModelViewSet 的列表路由功能并替换 permission_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
根据 cmets 的规定,您的用户模型必须具有所有者角色。如果您使用的是 django 用户模型,则可以进行 obj.id == request.user.id 比较