【问题标题】:django staff users manage their own users onlydjango 员工用户只管理自己的用户
【发布时间】:2013-04-02 16:07:27
【问题描述】:

在我的 Django 应用程序中,用户可以注册到站点并从管理员那里获得 staff_user 权限。 之后,员工用户可以使用默认的 django 管理站点创建和管理一些其他用户(普通用户)。 现在,我想让员工用户只看到和管理他从管理站点创建的用户,我不希望他看到其他员工用户创建的其他用户。

我该怎么做?我想我需要修改 admin.py 对吧?

【问题讨论】:

    标签: django django-models django-admin django-users


    【解决方案1】:

    不要修改管理站点。

    一般来说,您可以使用以下工具:

    • 创建群组
    • 将用户添加到组
    • 在您的模型上创建自定义权限,以指示某些操作

    https://docs.djangoproject.com/en/1.4/topics/auth/#custom-permissions

    但是,您要问的是:Now, I would like to let the staff user see and manage only the users he created from the admin site 在 django-admin 中是不可能的。

    Django-admin 站点仅旨在为完全受信任的用户提供美化的开发工具,而不是为最终用户提供可定制的应用程序。

    如果您的项目需要具有以下任何一项的管理站点...

    • 自定义管理功能。
    • 暴露给任何不完全信任的用户。

    ...那么恐怕您必须创建自己的自定义应用程序。

    【讨论】:

    • 好的,我创建了一个组,并在其中放置了一些具有创建其他用户的权限的 staff_users。当我以员工用户身份登录并转到管理员中的用户视图时,我还看到其他员工用户创建的普通用户,我不想要这个。如何将我正在创建的用户隐藏给其他员工用户?
    • 不要我们 is_staff 为此使用 is_admin 功能。
    • 我只能向员工用户显示他们自己的条目,但我不明白为什么我不能向他也显示他自己的用户.. myabe 我需要为用户模型创建一个额外的字段将用户与其创建者(员工用户)联系起来?
    • 如果您使用的是 django 1.5,则可以使用您自己的 User 对象,但这仍然不会改变 django 管理应用程序中可用的当前功能。 “管理员不是你的应用”。
    【解决方案2】:

    您可以用您自己的替换现有的 UserAdmin,它会覆盖 queryset() 并进行过滤。更大的问题是过滤什么。默认用户模型不会在模型实例中存储“created_by”。因此,无论何时添加用户,您都需要添加此信息。

    如何最好地做到这一点取决于您的 Django 版本。 Django 1.5 引入了一个“可配置的用户模型”,这使得这很容易。 https://docs.djangoproject.com/en/dev/releases/1.5/#configurable-user-model

    在早期版本中,您要么必须对用户模型进行猴子补丁,要么将该信息存储在单独的“用户配置文件”中,以 1:1 的方式附加到用户。 https://docs.djangoproject.com/en/dev/topics/auth/customizing/#extending-the-existing-user-model

    关于在 Django 管理员中对用户的信任(这不是一个主题,但我觉得有必要对你的答案发表评论),请在此处查看我的答案中的链接:Should I use Django's Admin feature?

    【讨论】:

      猜你喜欢
      • 2019-06-30
      • 1970-01-01
      • 1970-01-01
      • 2012-08-07
      • 1970-01-01
      • 2017-11-15
      • 2016-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多