2017-02-22 82 views
2

对象级别的权限

来自实例http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions/#object-level-permissionsDjango的:对象级权限DRY

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和不同的)解决了这个

不会干

但是,这不干燥。这不是DRY,因为我需要两次编码。有一次在has_object_permission()中,有一次在django-orm过滤器中。

问题

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

回答

2

如果你想让事情变得很干燥,你必须加载整个数据库条目并对每一个条目进行权限检查。

我怀疑这就是你真正想要的。 有时你不能保持干爽。

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

+0

虽然这不是我正在寻找的答案:谢谢你考虑这个问题。 – guettli

+1

是的,这也是令我困扰的事情,这不适合Django REST框架。我期待着看看有没有人有另一种选择。 – Linovia