2

我正在使用站点框架从一个代码库运行多个应用程序。我有 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)

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

谢谢

4

2 回答 2

1

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

还要检查具体的文档

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

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

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

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

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

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

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

我希望这会有所帮助。

于 2011-02-10T21:24:32.837 回答
0

Django-site-permissions 应用程序正是这样做的:

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

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

(免责声明:我是 django-site-permissions 应用程序的开发人员)

于 2011-05-30T12:25:15.183 回答