2

我想知道是否有人找到了一种反转DRF 中权限工作方式的好方法(使用 OR 而不是 AND)。现在,如果任何检查失败,则请求未通过身份验证。我想要一种方法,以便如果任何检查通过,请求就会通过身份验证。IE。

# currently:
permission_classes=(HasNiceHat, HasNicePants)

任何拥有漂亮帽子裤子的人的请求都将失败。我想要什么:

# goal:
AND_permission_classes=(HasNiceHat, HasNicePants)

如果用户有漂亮的帽子漂亮的裤子,就会成功。

我将假设所有用户都已登录(必须是任何一项检查才能通过),并且权限的实现不受任何限制。

4

1 回答 1

0

您可以创建自己的权限类并使用它吗?例如:

from rest_framework import permissions

class HasNiceHatOrHasNicePants(permissions.BasePermission):
    """
    Permission to check if user has a Nice Hat or has Nice Pants.
    If both are False do not return anything.
    """
    def has_permission(self, request, view):

        if request.user.has_nicehat() or request.user.has_nicepants():
            return True

然后,将这个新类导入到您的视图中,并像这样使用它:

permission_classes = (HasNiceHatOrHasNicePants,)

看起来rest_condition具有您需要的功能

于 2016-02-09T03:38:01.987 回答