Django站点框架权限

3
我正在使用sites框架在一个代码库中运行多个应用程序。我有3个用户和3个网站。他们可以登录到Django管理界面并创建内容,但我希望他们只能看到他们被允许管理的网站,而不是其他的网站。sites框架能够处理这个问题吗?如果不能,能否指导我如何完成这个任务?
编辑: 我所做的只是一个简单的例子。以下是具体步骤...
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)

这就是我感到困惑的地方。我理解一个网络日志有一个站点和用户的概念。但是如何限制该用户只能查看、添加/编辑为他们创建的自己的网络日志中的条目呢?
谢谢。
2个回答

2
是的,Django网站框架可以完全做到这一点。由于我对您已经完成了什么不是很清楚,所以无法真正帮助您,请提供更多细节。
另外,请查看具体文档编辑 好的,现在我明白了,您的问题是限制用户只能查看和编辑其专用站点的内容。这有点复杂。
这取决于您是使用管理界面还是自定义视图来处理这些视图和编辑。如果您使用自定义视图,可以轻松更改使用的查询集,但我想您使用管理界面。
在这种情况下,也许使用CurrentSiteManager()覆盖默认管理器(对象)可以完成工作。但是:
  • 它可能会产生副作用,不建议覆盖默认管理器,您需要测试它(第一个副作用是:您将无法列出所有站点上的所有编辑)
  • 您必须确保A用户无法登录B站点的管理界面
另一种解决方案可能是为每个网站创建自定义管理员。请参阅管理文档。
但是,我有一个问题:如果您不希望让用户在这些网站中的每个网站上编辑内容,那么您是否需要拥有独特的界面来管理所有这些管理网站?例如,让一个人能够在所有网站上编辑内容。如果不需要,也许Sites框架不是最好的选择,最好将每个网站独立开来并清晰地分开。
另一种解决方案是查看Django的permissions功能,它允许您为视图定义自定义权限。我认为(尚未尝试),它也可以用于保护管理视图。
希望这可以帮助您。

我为您编辑了一下,daks,也许这会有所帮助。这是我用来构建其他东西的一个小例子,但是同样的原则适用。希望能有所帮助。 - JeffTaggarty

0
Django-site-permissions 应用程序将完全做到这一点:

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接