2009-06-20 115 views
4

我在想,如果Django管理页面可以用于外部用户限制出入。Django管理 - 通过用户

比方说,我有这些模型:

class Publisher(models.Model): 
    admin_user = models.ForeignKey(Admin.User) 
    .. 

class Publication(models.Model): 
    publisher = models.ForeignKey(Publisher) 
    .. 

我不完全相信admin_user是 - 也许它可能是一个管理员用户的电子邮件?

反正。有没有办法允许管理员用户只能添加/编辑/删除发布者与该管理员用户关联的出版物?

- 谢谢! -Chris

回答

15

如果您在自己的应用程序中需要更细粒度的权限,那么应该注意,Django的管理应用程序通过以下可以在ModelAdmin的子类上覆盖的方法来支持此功能。需要注意的是,所有这些方法获得当前HttpRequest对象作为参数,允许定制基于特定身份验证的用户:

  • queryset(self, request):应该返回一个QuerySet中的模型对象的联系名单中。不存在于此QuerySet中的对象将不会显示。如果添加对象是允许的,否则假
  • has_add_permission(self, request):应返回true。如果编辑obj是允许的,否则假
  • has_change_permission(self, request, obj=None):应返回true。如果obj为None,应该返回True或False来表示是否允许编辑这种类型的对象(例如,False将被解释为表示当前用户不允许编辑此类型的任何对象)。如果删除obj是允许的,否则返回False
  • has_delete_permission(self, request, obj=None):应返回true。如果obj为None,应该返回True或False来指示是否允许删除此类型的对象(例如,如果False将被解释为意味着当前用户不允许删除此类型的任何对象)。

[django.com]

+0

+1我不知道管理员列表的queryset选项。 – SingleNegationElimination 2009-06-22 17:39:43

0

Django管理可以在一定程度上,受到限制。对于给定的用户,首先,他们必须具有管理员权限才能登录管理网站。拥有此标志的任何人都可以查看所有管理页面。如果您想限制观看,那么您的运气不好,因为那样做没有实现。从那里,每个用户都有许多权限,用于管理站点中的每个模型的创建,更新和删除。处理此问题最方便的方法是创建组,然后为组分配权限。

1

我看到当时有人问克里斯的回答是有用的。 但是现在差不多已经到2016年了,我想它更容易启用Django Admin panel对最终用户的限制访问。

Django的认证系统提供:

组:应用标签和权限多个用户的通用方法。

在哪里可以添加特定的权限,并通过管理面板或写代码的组适用于用户。

将用户添加到这些特定组后,管理员需要为这些用户启用is_staff标志。

用户将能够访问管理员中的受限注册模型。 我希望这可以帮助。