【问题标题】:Return QuerySet based on User group/permissions根据用户组/权限返回 QuerySet
【发布时间】:2021-02-02 02:11:58
【问题描述】:

我试图找出基于Users 权限限制QuerySets 的“最佳做法”。

例如,仪表板上有一张发票表。拥有GroupUser 调用Admin 可以看到所有发票,但拥有Broker 组的User 只能看到他们自己的发票。这意味着只有具有user = ... 的发票。

我的想法是创建两个权限can_see_all_invoicescan_see_own_invoices

现在,当我使用Django Rest Framework 调用QuerySet 时,我将检查权限并返回过滤后的QuerySet

或者我应该在前端过滤QuerySet,如果Broker 要求提供所有发票,我会引发 PermissionError?

正在使用这些方法中的哪一种或有不同的方法?

【问题讨论】:

    标签: python django django-rest-framework django-queryset django-permissions


    【解决方案1】:

    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,并且对象的评估是一个昂贵的过程

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-16
      • 1970-01-01
      相关资源
      最近更新 更多