Django 管理 - 组权限编辑或查看模型

12 投票
2 回答
7538 浏览
提问于 2025-04-17 07:46

我正在寻找一种方法,来定制Django管理后台,以便根据用户组来设置权限。

比如说,我刚创建了一个“开发者”组,现在我也创建了一个“工单”模型,并用AdminModel来指定如何列出数据。

我希望这个模型只有“开发者”组的人能看到,而其他不在这个组的人看不到(也就是说,想根据组来过滤视图)。

我看了很多文档,但真的找不到该怎么做才能实现这个功能。

出于安全考虑,我还需要在运行时检查用户组,当我为特定模型(就是我对“开发者”组以外的人隐藏的那个模型)添加或删除对象时,否则只要知道网址就能使用这个模型 :s

这看起来是个简单的任务,但也许我漏掉了什么……有没有什么第三方中间件,或者其他方法可以做到?如果需要的话,我也准备修改管理视图,但我需要知道该怎么做。

谢谢你 :-)

2 个回答

0

我花了好几个小时想找一个方法,能通过点击屏幕来编辑自定义管理员(基于我自己的模型)的权限,而不需要写太多代码。

可以使用Django的 /admin/auth/user/ 里的“用户权限”部分。

最后我发现了这个方法:只需要安装 django-admin-view-permission

这样我就可以在这里更改员工自定义模型的权限了,具体可以参考这个图片:这里输入图片描述

另外,在组的部分 /admin/auth/group/add/ 我可以创建一个具有特定权限的组,并将特定员工分配到他们的权限组中。

18

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 禁止访问的错误。

撰写回答