2016-08-25 4 views
0

Django 프로젝트에서 Django 사용자 모델을 사용하고 있습니다. 내 사용자보기 :Django에서 사용자에게 권한을 할당하십시오.

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

당신이 인증 된 사용자가 USER_ID를 전달하여 다른 사용자의 세부 정보를 볼 수 원하지 않는 찾으시는 것입니까? – Windsooon

답변

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) 

이제 소유자가 자신의 세부 정보를 볼 수 있습니다

관련 문제