我目前正在使用has_change_permission
自定义 django 管理类中的钩子来实现一种简单的行级权限形式,并确定非超级用户是否可以编辑特定对象,如下所示:
def has_change_permission(self, request, obj=None):
if obj is None or request.user.is_superuser or (obj and not obj.superuser_only): # (my model has a 'superuser_only' flag that gets set via fixtures, but its beyond the scope of this question)
return True
return False
这很好用:所有对象都显示给用户,但如果他们单击他们无权编辑的对象,那么他们将被带到我的 403 页面,大概是因为 PermissionDenied 被引发。但是,在这种情况下,给他们一个指向权限被拒绝页面的超链接似乎并不理想。我想显示这些对象,但不提供指向列表页面上编辑页面的任何超链接(如果他们尝试手动使用对象的 URL,除了提高 PermissionDenied 之外)。是否有一个简单的钩子可以在没有可怕的黑客攻击的情况下删除这些超链接?我是一位经验丰富的 django 开发人员,所以如果你能指出我正确的方向(如果有的话),我将能够实现细节或确定它现在不值得。