【问题标题】:How to prevent staff users from editing/deleting superuser in django如何防止员工用户在 django 中编辑/删除超级用户
【发布时间】:2023-03-09 02:02:01
【问题描述】:

我希望能够允许某些员工用户添加其他用户和员工的权限,但对我来说似乎很奇怪的是 1) 员工可以将自己的权限更改为超级用户,或者只是创建一个新用户并授予超级用户权限给他们。 2) 删除超级用户或撤销其超级用户身份

一些员工用户应该可以修改/创建/删除用户,但他们应该不能删除超级用户,也不能给自己或其他自己没有权限的用户分配权限。

这一直是我在我用 PHP 编写的用户系统中加入的逻辑,我只是​​想知道是否有办法在 Django 中更改这些设置,因为我真的很喜欢 Python/Django(我只是开始学习它)并且可以看到自己从 PHP 迁移。但对我来说,部分美妙之处在于管理面板,如果这是无法改变的,那就有点令人畏惧了。

这让我想起了我在担任 GM 时使用的餐厅 POS 系统。作为总经理,我拥有轮班经理所没有的权力。但是,轮班经理可以在我的个人资料(他们的)中添加指纹,然后以我的身份登录并做他们想做的任何事情。我一直觉得这是一个严重的安全漏洞,甚至对这样做的员工进行了纪律处分。它还允许轮班经理创建具有高于他们头衔的新员工,这造成了同样的问题,因为他们可以创建一个新的总经理或区域经理,登录,做他们想做的任何事情,并查看他们应该看到的各种事情。 t(比如他们同事的工资),然后隐藏(而不是删除)用户。 (这就是他被抓到的原因)

如果有人有任何解决方法或任何想法和建议,我很乐意听取他们的意见并继续学习这种令人兴奋的新语言。提前致谢!

【问题讨论】:

    标签: django


    【解决方案1】:

    Django admin 是一个基本的 CRUD 系统,不建议这样使用。 Django 视图(您的自定义视图)为您提供了更多控制流程的能力。

    首先,Django Permissions 可能是一个很好的起点。为用户类型创建组并为每个组分配所需的权限。不要授予非超级用户更改组或权限的权限。

    第二件事是使用Django Signals 在保存之前检查数据。例如,用于创建用户的pre_save 信号可用于检查用户的is_superuseris_staff 值是否由非超级用户设置。您可以将added_by 值添加到用户模型并使用此值验证您的检查。

    此外,为 Django 管理员使用自定义表单也是可能的,并且可能是最简单的解决方案。只需制作一个自定义表单来创建和编辑用户,并在允许视图保存任何内容之前直接验证表单中的更改。也可以通知用户他们无权访问他们所做的更改,并通知管理层有关尝试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-02
      • 2013-04-12
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      相关资源
      最近更新 更多