当链接权限时,例如
permission_classes = [AccountOwnerPermission, IsAdminUser]
它的行为类似于权限类之间的AND运算符
最好的选择是创建一个新的权限,该权限允许权限逻辑。
class AdminOrAccountOwnerPermission(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
return obj == request.user or request.user.id_admin
或者,当使用的权限具有长而复杂的代码以保持代码干燥时:
class AdminOrAccountOwnerPermission(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
return AccountOwnerPermission().has_object_permission(request, view, obj) or IsAdminUser().has_object_permission(request, view, obj)
编辑:
请回答评论中的问题,说明其行为的原因
AllowAny
.
AccountOwnerPermission
有
has_object_permission
但是没有
has_permission
另一方面
IsAdminUser
有
你有许可吗
但是没有
拥有_object _权限
实施。
当这些函数未实现时,函数返回
True
默认情况下(从
BasePermission
).因此,在跑步时
你有许可吗
,
帐户所有者权限
总是回来
符合事实的
跑步时
拥有_object _权限
,
艾德明
他总是回来
符合事实的
.
实施
AccountOwnerPermission.has_permission
将给出预期的行为。