我在Django项目中使用Django User模型。我的用户视图是:
from django.contrib.auth.models import User
from django.dispatch import receiver
from django.db.models.signals import post_save
from rest_framework import generics
from rest_framework import permissions
from rest_framework import status
from rest_framework.authtoken.models import Token
from rest_framework.response import Response
from myapp.serializers.user import UserSerializer, UserListSerializer
class UserList(generics.ListCreateAPIView):
model = User
permission_classes = (permissions.IsAuthenticated, )
_ignore_model_permissions = True
serializer_class = UserListSerializer
queryset = User.objects.exclude(pk=-1)
def post(self, request, *args, **kwargs):
userName = request.DATA.get('username', None)
userPass = request.DATA.get('password', None)
user = User.objects.create_user(username=userName, password=userPass)
if not user:
return Response({'message': "error creating user"}, status=status.HTTP_200_OK)
return Response({'username': user.username}, status=status.HTTP_201_CREATED)
class UserDetail(generics.RetrieveUpdateDestroyAPIView):
model = User
permission_classes = (permissions.IsAuthenticated, )
_ignore_model_permissions = True
serializer_class = UserSerializer
queryset = User.objects.exclude(pk=-1)
当我尝试查看以超级用户身份登录的用户页面时,我可以看到所有用户的列表。但是当我尝试使用非超级用户访问它时,我得到一个空列表。
我希望每个用户能够查看用户列表,但只有非自己的用户详细信息(如果它不是超级用户)。我尝试使用信号(例如post_migrate
),但问题是每次迁移时我需要为每个其他用户提供查看权限。
有没有更简单的方法呢?
答案 0 :(得分:0)
我可以看到所有用户的列表。但是当我尝试使用非超级用户访问它时,我得到一个空列表。
即使您不是超级用户,也可以从代码中访问UserList。
我希望每个用户都能够查看用户列表,但只有非自己的用户详细信息才能查看用户列表。
尝试自定义权限。
class IsOwner(permissions.BasePermission):
"""
Custom permission to only allow owners of an object to edit it.
"""
def has_object_permission(self, request, view, obj):
return obj == request.user
class UserDetail(generics.RetrieveUpdateDestroyAPIView):
model = User
permission_classes = (permissions.IsOwner, )
_ignore_model_permissions = True
serializer_class = UserSerializer
queryset = User.objects.exclude(pk=-1)
现在只有所有者才能看到他们的详细信息