django DRF自定义权限:详细信息视图的视图级别权限

时间:2020-02-01 16:49:06

标签: django django-rest-framework

不确定如何处理详细视图(例如api/teams/<int:pk>)中的权限。 假设我有一个自定义权限类,如果发出请求的用户在查询的团队中,则该类应该允许访问。

类似的东西:

class IsInTeam(BasePermission):
  def has_permission(self, request, view):
    # should I implement this at all?

  def has_object_permission(self, request, view, team):
    return team.hasMember(request.user)

由于无论如何都调用了has_object_permission(因为“股票”视图会根据docs调用get_object时检查权限):

注意:仅在视图级has_object_permission检查已经通过的情况下,才调用实例级has_permission方法。另请注意,为了运行实例级检查,视图代码应显式调用.check_object_permissions(request, obj)。如果您使用的是通用视图,则默认情况下会为您处理。

现在,据此,只有has_object_permission返回了has_permission时,True才会被检查。尽管这是有道理的,但有人可以辩称,由于此视图严格基于对CRUD表示的特定对象的pk操作,因此可以在has_permission方法内执行所有必要的检查。

问题是:这是不好的做法吗?如果是这样,为什么?我能提出的唯一原因是,在has_permission中,必须检查对象是否存在。这会有些混乱,因为权限检查不必检查对象是否存在。

0 个答案:

没有答案