我是否使用django rest框架(v3.4.6)对象级权限。但是,我无法弄清楚几件事情。首先,我创建如果用户在一家特定的商店,检查自定义权限:Django REST框架检查不必要的权限
class Works4Shop(BasePermission):
def has_object_permission(self, request, view, obj):
profile = request.user.profile
if obj.shop in profile.shops.all():
return True
else:
return False
我加入permission_classes = (Works4Shop,)
到一个新的自定义视图类ShopItemsView(APIView)
现在开始好奇的部分首先我读,我需要明确检查通过调用self.check_object_permissions(request,obj)
来实现对象级权限。然而,我所看到的是,通过模型管理器获取任何对象都会强制执行检索对象上的策略。不完全,它确实称为has_object_permission(self, request, view, obj)
,但它忽略了结果。问题在于性能,这种事情给很多不必要的选择给DB。任何人都可以解释吗?我也可以从数据库中发布日志。
除了您的问题。你能解释为什么你同时使用'profile = UserProfile.objects.get(user = request.user)'和'profile = request.user.profile'来分配配置文件吗?我没有看到两者都需要 – rrmerugu
我的理解是,对象级权限旨在检查每个返回的对象是否满足此权限条件。也许你只需要一个常规的'has_permission()',每个请求检查一次? – serg
@rrmerugu在复制代码时,这是我的错误。我正在尝试不同的方法来获取配置文件。 – mrangry777