在没有 "is staff" 标志的情况下授予 "auth | User | Can change user" 权限是否安全?

Is it safe to grant "auth | User | Can change user" permissions without the "is staff" flag?

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

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

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

我的问题是:

如果我在该视图上使用 @permission_required 装饰器并与 auth | User | Can change user 权限合作,用户是否有任何其他方式来破解他们授予自己超级管理员角色的方式(甚至假设用户是高级 Django 程序员)?我说的是像 e 这样的事情。 G。 API 个我不知道或类似的电话。

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

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

在我们的一个项目中,我们添加了 2-3 种类型的管理员用户,这非常安全。我们添加了 Maintainer、Administrator、SuperUser 和两种类型的最终用户(这是要求)。我们在 Django Admin 中也做了很多定制,并在 Django Admin 中列出了所有类型的组和用户。

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

创建一个 custom permission 例如'can_change_user_restricted',并在您的自定义视图中检查该权限。

那么你就不用担心将来可能会添加另一个 view/api,或者可能会设置 is_staff 标志,突然之间用户可以让自己成为超级用户。