Django站点框架权限

时间:2011-02-10 16:24:58

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

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

这是我感到困惑的地方。我理解博客的概念,其中也包含对网站和用户的引用。但是,如何限制该人只看到并添加/编辑他们为自己创建的博客上的条目?

由于

2 个答案:

答案 0 :(得分:1)

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

同时检查the specific documentation

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

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

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

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

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

但是,只是一个问题:如果您不想让用户在每个网站上编辑内容,您是否需要为所有这些管理网站提供唯一的界面?例如,让一个人能够编辑所有网站上的内容) 如果没有,也许站点框架不是可行的方法,你应该更好地使每个网站独立并明确分开?

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

我希望这可以提供帮助。

答案 1 :(得分:0)

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

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

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

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