2011-12-05 52 views
8

我正在寻找一种方法来自定义Django管理以支持基于用户组的权限。django admin - 组编辑或查看模型的权限

例如,我刚刚创建了Developers组,现在我还创建了Tickets模型,并使用AdminModel指定如何列出数据。

我想让这个模型只能由开发者看到,并且隐藏在彼此中而不在这个组中(例如基于组过滤视图)。 我读过很多文档,但无法真正找到并理解如何使其工作。

为了安全起见,我还需要在运行时为特定模型(我向开发人员组以外的人隐藏的对象)添加删除对象时检查用户组,否则它只需要知道使用模型的URL:s

它看起来像一个简单的任务,但也许我失去了一些东西......任何第三方中间件,或只是一种方式来做到这一点?如果需要,我也准备编辑管理视图,但我需要知道该怎么做。

谢谢:-)

回答

12

ModelAdmin有三种方法处理用户权限:has_add_permissionhas_change_permissionhas_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禁止。

+0

酷!不知道自定义权限处理有一个简单的管理钩子! –

+0

哇!这似乎很容易进行:-) 类似的问题没有得到一个这么容易理解的解决方案。 非常感谢你! –

+0

惊人的是指出我正在工作 –