不确定如何处理详细视图(例如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
中,必须检查对象是否存在。这会有些混乱,因为权限检查不必检查对象是否存在。