【问题标题】:Django sites framework permissionsDjango 站点框架权限
【发布时间】:2011-06-24 23:48:36
【问题描述】:

我正在使用站点框架从一个代码库运行多个应用程序。我有 3 个用户和 3 个站点。他们可以登录到 django 管理界面并创建内容,但我希望他们只看到他们被允许管理的站点,而不是其他站点,站点框架可以处理这个吗?如果没有,任何人都可以指导我如何实现这一目标的正确方向?

编辑:

我所做的只是一个简单的例子。来了……

class Weblog(models.Model):
    title = models.CharField(max_length=250)
    slug = models.SlugField(unique=True)
    user = models.ForeignKey(User) # this is the user who should own that blog and see nothing else
    site = models.ForeignKey(Site)

    objects = models.Manager()
    on_site = CurrentSiteManager()

    def __unicode__(self):
        return self.title

class Entry(models.Model):
    title = models.CharField(max_length=200)
    slug = models.SlugField()
    body = models.TextField()
    author = models.ForeignKey(User)
    weblog = models.ForeignKey(Weblog)

这就是我困惑的地方。我理解一个博客的概念,它也引用了一个站点和一个用户。但是,如何限制该人只能查看和添加/编辑为他们创建的自己的博客上的条目?

谢谢

【问题讨论】:

    标签: django django-admin django-authentication django-permissions


    【解决方案1】:

    是的,Django 站点框架可以做到这一点。由于我没有太多关于你已经做了什么的信息,我真的不能帮助你,所以请提供更多细节。

    同时检查the specific documentation

    编辑好的,我现在明白了,您的问题是限制用户只能查看和编辑有关其专用网站的内容。这有点复杂。

    这取决于您是使用管理界面还是自定义视图来处理这些视图和编辑。如果您使用自定义查询集,则可以轻松更改所使用的查询集,但我想您使用的是管理界面。

    在这种情况下,也许用 CurrentSiteManager() 覆盖默认管理器(对象)可以完成这项工作。但是

    • 它可能有副作用,不建议覆盖默认管理器,您需要对其进行测试(第一个副作用是:您不会列出所有站点上的所有编辑)
    • 您必须确保用户 A 无法登录站点 B 管理界面

    另一种解决方案可能是为这些网站中的每一个创建自定义管理员。请参阅管理文档。

    但是,只是一个问题:如果您不想让用户在每个网站上编辑内容,那么您是否需要对所有这些管理网站都有一个独特的界面?例如让一个人能够编辑所有网站上的内容) 如果不是,可能是 Sites 框架不可行,您最好让每个网站独立且明确分离?

    另一个解决方案是查看 Django 的 permissions 可能性,它允许您为视图定义自定义权限。我认为(还没有尝试过)它也可以用来保护管理员视图。

    我希望这会有所帮助。

    【讨论】:

    • 我为你们编辑了它,也许这会有所帮助。这是我用来构建其他东西的一个小例子,但同样的原则也适用。希望有帮助
    【解决方案2】:

    Django-site-permissions 应用程序会这样做:

    https://github.com/bmihelac/django-site-permissions

    如果它满足您的需求,您可以将其集成到您的项目中,或者查看源代码以了解如何实现站点范围的权限。

    (免责声明:我是 django-site-permissions 应用的开发者)

    【讨论】:

      猜你喜欢
      • 2017-04-13
      • 2016-11-20
      • 1970-01-01
      • 2019-07-13
      • 2014-08-25
      • 2016-01-25
      • 1970-01-01
      • 2012-05-06
      • 2018-11-19
      相关资源
      最近更新 更多