Django 站点框架权限

标签 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)

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

谢谢

最佳答案

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

同时检查 the specific documentation .

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

这取决于您是使用管理界面还是自定义 View 来处理这些 View 和编辑。如果您使用自定义的,可以很容易地更改所使用的查询集,但我想您使用的是管理界面。

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

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

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

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

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

希望对您有所帮助。

关于Django 站点框架权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4959786/

相关文章:

Heroku 上的 Django,url 模板标签导致 'ParseResult' 对象不可调用

python - 是否有一个 django 管理小部件用于使用内联 through_model 添加多个外键

python - 从管理页面隐藏 django-allauth 模型

django - 如何访问 django admin.SimpleListFilter 中过滤后的查询集

Django密码字段自定义类

python - Django 1.8 不使用 Jinja2 模板引擎

python - 如何在网络服务器上上传图像。 Django

python - 如何在django模型中用 `id`作为主键覆盖 `timestamp`作为主键?

python - 使用新数据库帮助 Django RemoteUserMiddleware RemoteUserBackend

angularjs - Django REST框架+ Angular项目上的 token 认证