1

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

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

由于我希望他们只能编辑某些字段,因此我为此创建了一个非常有限的视图。剩下要做的就是将对该视图的权限实际授予该用户子集。我找到的唯一解决方案是仍然授予他们auth | User | Can change user权限(不让他们staff)。

我的问题是这样的:

如果我@permission_required在该视图上使用装饰器并与auth | User | Can change user权限合作,是否有任何其他方法可以让用户破解他们的方式来授予自己超级管理员角色(即使假设用户是高级 Django 程序员)?我说的是诸如我不知道的 API 调用之类的事情,或者类似的事情。

我想将我的代码中可能出现的错误排除在此处的范围之外。

4

2 回答 2

2

最好创建一个自定义权限,例如“can_change_user_restricted”,并在您的自定义视图中检查该权限。

然后您不必担心将来可能会添加另一个视图/api,或者is_staff可能会设置标志,然后用户突然可以让自己成为超级用户。

于 2017-07-05T10:27:43.110 回答
1

恕我直言,是的,在用户上使用您自己的类型/创建任何类型的自定义字段是非常安全的。

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

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

于 2017-07-05T10:26:20.283 回答