Как написать разрешение пользователя экземпляра является request.user? - PullRequest
0 голосов
/ 06 июня 2018

Как я могу написать IsThePhysicalServerUser?

Вы видите мое UpdateAPIView:

class PhysicalServerCustomerUpdateAPIView(UpdateAPIView):
    """
    Customer's update PhysicalServer
    """
    serializer_class = CustomerUpdatePhysicalServerSerializer
    permission_classes = [IsThePhysicalServerUser]
    queryset = PhysicalServer.objects.all()

Там я хочу написать разрешение, которое IsThePhysicalServerUser.

модель PhysicalServer ниже:

class PhysicalServer(models.Model):
    """
    实体服务器
    """
    name = models.CharField(max_length=32)
    desc = models.CharField(max_length=256, null=True, blank=True)
    ...
    user = models.ForeignKey(to=User, related_name="physical_servers", null=True, blank=True, on_delete=models.SET_NULL)

Я хочу, чтобы разрешение IsThePhysicalServerUser показало, что использование экземпляра PhysicalServer является пользователем запроса.Как написать разрешение?

1 Ответ

0 голосов
/ 06 июня 2018

Просто проверьте, что пользователь экземпляра равен request.user:

class IsSuperAdminOrPhysicalServerCustomer(permissions.BasePermission):
    """
    SuperUser or instance.user equals request.user
    """
    def has_object_permission(self, request, view, obj):
        # if you want everyone can see user info
        if request.method in permissions.SAFE_METHODS:
            return True
        # if you use Django2.0 is_authenticated(request.user) should be changed to request.user.is_authenticated
        if request.user and request.user.is_authenticated:
            # instance.user equal self or is superuser
            return obj.user == request.user or request.user.is_superuser
        else:
            return False
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...