Django “授予”是否安全;授权“用户”可以更改“用户”;没有“许可证”的权限;“是职员”;旗帜

Django “授予”是否安全;授权“用户”可以更改“用户”;没有“许可证”的权限;“是职员”;旗帜,django,django-authentication,django-1.11,Django,Django Authentication,Django 1.11,我需要某些用户编辑django.contrib.auth.models.User对象 我的第一个想法是授予他们auth | User | Can change User权限,并将他们标记为is staff,这样他们就可以登录到Django管理站点。但问题是,他们可以利用这一点让自己成为超级管理员 因为我希望他们只能编辑某些字段,所以我为此创建了一个非常有限的视图。剩下我要做的是,实际将该视图的权限授予该用户子集。我找到的唯一解决方案是仍然授予他们auth | User |可以更改用户权限(而不让

我需要某些用户编辑
django.contrib.auth.models.User
对象

我的第一个想法是授予他们
auth | User | Can change User
权限,并将他们标记为
is staff
,这样他们就可以登录到Django管理站点。但问题是,他们可以利用这一点让自己成为超级管理员

因为我希望他们只能编辑某些字段,所以我为此创建了一个非常有限的视图。剩下我要做的是,实际将该视图的权限授予该用户子集。我找到的唯一解决方案是仍然授予他们
auth | User |可以更改用户
权限(而不让他们成为
员工

我的问题是:

如果我在该视图上使用
@permission\u required
decorator,并与
auth|User|合作,可以更改用户的
权限,那么用户是否有其他方法来授予自己超级管理员角色(即使假设用户是高级Django程序员)?我说的是e。G我不知道的API调用或类似调用


我想把代码中可能出现的错误排除在这里的范围之外。

IMHO,是的,在用户上使用自己的类型/创建任何类型的自定义字段都是非常安全的

在我们的一个项目中,我们添加了2-3种类型的管理员用户,而且非常安全。我们添加了维护者、管理员、超级用户和两种类型的最终用户(这就是需求)。我们在Django Admin中进行了许多定制,并在Django Admin中列出了所有类型的组和用户


JFYI我们没有向客户提供Django Admin的访问权限,我们提供了超级用户登录来创建任何类型的用户来访问我们的工具。

最好创建一个例如“can\u change\u User\u restricted”的权限,并在自定义视图中检查该权限

这样,您就不必担心将来可能会添加另一个视图/api,或者可能会设置
is_staff
标志,用户会突然成为超级用户