Django 管理 - 组权限编辑或查看模型
我正在寻找一种方法,来定制Django管理后台,以便根据用户组来设置权限。
比如说,我刚创建了一个“开发者”组,现在我也创建了一个“工单”模型,并用AdminModel来指定如何列出数据。
我希望这个模型只有“开发者”组的人能看到,而其他不在这个组的人看不到(也就是说,想根据组来过滤视图)。
我看了很多文档,但真的找不到该怎么做才能实现这个功能。
出于安全考虑,我还需要在运行时检查用户组,当我为特定模型(就是我对“开发者”组以外的人隐藏的那个模型)添加或删除对象时,否则只要知道网址就能使用这个模型 :s
这看起来是个简单的任务,但也许我漏掉了什么……有没有什么第三方中间件,或者其他方法可以做到?如果需要的话,我也准备修改管理视图,但我需要知道该怎么做。
谢谢你 :-)
2 个回答
0
我花了好几个小时想找一个方法,能通过点击屏幕来编辑自定义管理员(基于我自己的模型)的权限,而不需要写太多代码。
可以使用Django的 /admin/auth/user/ 里的“用户权限”部分。
最后我发现了这个方法:只需要安装 django-admin-view-permission。
这样我就可以在这里更改员工自定义模型的权限了,具体可以参考这个图片:
另外,在组的部分 /admin/auth/group/add/ 我可以创建一个具有特定权限的组,并将特定员工分配到他们的权限组中。
18
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 禁止访问的错误。