我正在寻找一种方法来自定义Django Administration以支持基于用户组的权限。
例如,我刚创建了Developers组,现在我也创建了Tickets模型,使用AdminModel指定如何列出数据。
我希望这个模型仅由开发人员可见,并且彼此隐藏而不是在该组中(例如,基于组过滤视图)。 我已经阅读了很多文档,但无法真正找到并理解如何使其工作。
出于安全考虑,我还需要在添加时删除特定模型的对象(我已经隐藏给开发者组之外的人隐藏的对象),在运行时检查用户组,否则只需要知道URL使用模型:s
它看起来像一个简单的任务,但也许我错过了一些东西......任何第三方中间件,或只是一种方法吗?如果需要,我也准备编辑管理视图,但我需要知道该怎么做。
谢谢: - )
答案 0 :(得分:12)
ModelAdmin
有三种处理用户权限的方法:has_add_permission
,has_change_permission
和has_delete_permission
。这三个都应该返回布尔值(True
/ False
)。
所以你可以这样做:
class TicketAdmin(admin.ModelAdmin):
...
def has_add_permission(self, request):
return request.user.groups.filter(name='Developers').exists()
def has_change_permission(self, request, obj=None):
return request.user.groups.filter(name='Developers').exists()
def has_delete_permission(self, request, obj=None):
return request.user.groups.filter(name='Developers').exists()
从其中一个返回False
时,会导致403 Forbidden。
答案 1 :(得分:0)
我已经尝试了几个小时来找到一种方法来通过点击屏幕来编辑自定义管理员(基于我的自定义模型)的权限,而无需大量编码。
使用Django的/admin/auth/user/“用户权限:部分”
我终于找到了: 只是为了安装django-admin-view-permission
也在组部分/admin/auth/group/add/我可以创建一个有一定权限的组,并将特定的人员分配到他们的权限组中。