问题描述
我正在尝试找出基于QuerySet
权限限制User
的“最佳实践”是什么。
例如,仪表板上有一张发票表。名为User
的{{1}}的{{1}}可以看到所有发票,但是具有组Group
的{{1}}只能看到他们自己的发票。这意味着仅包含Admin
的发票。
我的想法是创建两个权限User
和broker
。
现在,当我使用user = ...
调用can_see_all_invoices
时,我将检查权限并返回过滤后的can_see_own_invoices
。
还是我应该在前端过滤QuerySet
,如果Django Rest Framework
索要所有发票,我会引发PermissionError吗?
解决方法
IMO,这将是一种干净的方法
class MyInvoiceAPI:
def get_queryset(self):
qs = Invoice.objects.all()
if self.request.user.has_perm('can_see_all_invoices'):
return qs
return qs.filter(user=self.request.user)
注释
- 您不需要两个权限,只需一个
can_see_all_invoices
- 在这种情况下,我不会引发任何权限被拒绝的错误,因为它是一个List API,而对象的评估是一个昂贵的过程