【问题标题】:Django: Object level permissions DRYDjango:对象级权限 DRY
【发布时间】:2017-07-12 06:09:20
【问题描述】:

对象级权限

来自http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/#object-level-permissions的示例

class IsOwnerOrReadOnly(permissions.BasePermission):
    """
    Custom permission to only allow owners of an object to edit it.
    """

    def has_object_permission(self, request, view, obj):
        # Read permissions are allowed to any request,
        # so we'll always allow GET, HEAD or OPTIONS requests.
        if request.method in permissions.SAFE_METHODS:
            return True

        # Write permissions are only allowed to the owner of the snippet.
        return obj.owner == request.user

我的需求:用户可以编辑的所有对象的查询集

我想要一个 django-orm 查询集,其中包含给定用户可以编辑的所有对象。

我想我可以通过创建一个复杂的 django-orm 过滤器(带有 OR 和 distinct)来解决这个问题

不干燥

但这不是 DRY。这不是 DRY,因为我需要对这些东西进行两次编码。一次在has_object_permission() 中,一次在 django-orm 过滤器中。

问题

如何在不重复权限检查的情况下解决我的需求(用户可以编辑的所有对象的查询集)?

【问题讨论】:

    标签: django django-rest-framework dry


    【解决方案1】:

    如果你想让事情保持干燥,你必须加载整个数据库条目并对每个条目应用权限检查。

    我怀疑那是你真正想要的。 有时你不能保持干燥。

    向用户显示数据时也是如此。您通常会在执行查询时隐式应用基本权限,然后确保完整权限是否有效。

    【讨论】:

    • 虽然这不是我想要的答案:感谢您考虑这个问题。
    • 是的,这也让我感到不安,这不适合 Django REST 框架。我期待着看看是否有人有其他选择。
    猜你喜欢
    • 1970-01-01
    • 2019-12-24
    • 2012-06-14
    • 2014-01-10
    • 2016-03-26
    • 2017-05-04
    • 2018-06-25
    • 2021-09-20
    相关资源
    最近更新 更多