或 DjangoRestFramework 的样式权限
OR style permissions for DjangoRestFramework
我想知道是否有人找到了一种好方法来反转 权限在 DRF 中的工作方式(使用 OR 而不是 AND)。现在,如果任何检查失败,则请求未通过身份验证。我想要一种方法,以便如果任何检查通过,请求 是 已通过身份验证。即
# currently:
permission_classes=(HasNiceHat, HasNicePants)
对于任何戴着漂亮帽子和裤子的人,请求都会失败。我想要什么:
# goal:
AND_permission_classes=(HasNiceHat, HasNicePants)
如果用户有漂亮的帽子或漂亮的裤子就会成功。
我假设所有用户都已登录(必须通过任一检查),并且权限的实现不受任何限制。
您可以创建自己的权限 class 并使用它吗?
例如:
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
然后,将这个新 class 导入您的视图,并像这样使用它:
permission_classes = (HasNiceHatOrHasNicePants,)
看起来 rest_condition 具有您需要的功能
我想知道是否有人找到了一种好方法来反转 权限在 DRF 中的工作方式(使用 OR 而不是 AND)。现在,如果任何检查失败,则请求未通过身份验证。我想要一种方法,以便如果任何检查通过,请求 是 已通过身份验证。即
# currently:
permission_classes=(HasNiceHat, HasNicePants)
对于任何戴着漂亮帽子和裤子的人,请求都会失败。我想要什么:
# goal:
AND_permission_classes=(HasNiceHat, HasNicePants)
如果用户有漂亮的帽子或漂亮的裤子就会成功。
我假设所有用户都已登录(必须通过任一检查),并且权限的实现不受任何限制。
您可以创建自己的权限 class 并使用它吗? 例如:
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
然后,将这个新 class 导入您的视图,并像这样使用它:
permission_classes = (HasNiceHatOrHasNicePants,)
看起来 rest_condition 具有您需要的功能