Разрешения фреймворка сайтов Django - PullRequest
2 голосов
/ 10 февраля 2011

Я использую структуру сайтов для запуска нескольких приложений из одной базы кода. У меня 3 пользователя и 3 сайта. Они могут войти в интерфейс администратора django и создавать контент, но я хочу, чтобы они видели только сайт, которым им разрешено управлять, а не другие, может ли инфраструктура сайтов справиться с этим? если нет, то может ли кто-нибудь направить меня в правильном направлении относительно того, как этого можно достичь?

EDIT:

То, что я сделал, было простым примером. Здесь идет ....

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 ]

1 голос
/ 11 февраля 2011

Да, инфраструктура сайтов Django может сделать именно это.Поскольку у меня мало информации о том, что вы уже сделали, я не могу вам помочь, поэтому, пожалуйста, предоставьте более подробную информацию.

Также проверьте специальную документацию .

РЕДАКТИРОВАТЬ Хорошо, теперь я понимаю, ваша проблема заключается в том, чтобы ограничить пользователей только просмотром и редактированием контента на их выделенном сайте.Это немного сложнее.

Это зависит от того, используете ли вы интерфейс администратора или пользовательские представления для обработки этих представлений и изменений.Если вы используете пользовательские, это может быть легко сделано путем изменения используемого набора запросов, но я полагаю, что вы используете интерфейс администратора.

В этом случае, возможно, переопределение менеджера (объектов) по умолчанию с CurrentSiteManager () может сделать работу,Но

  • может иметь побочные эффекты, переопределение менеджера по умолчанию не рекомендуется, вам нужно его протестировать (первый побочный эффект: у вас не будет списка всех правок на всех сайтах)
  • вы должны быть уверены, что пользователь A не может войти в интерфейс администратора сайта B

Другим решением может быть создание пользовательских администраторов для каждого из этих веб-сайтов.См. Документ администратора.

Но, просто вопрос: если вы не хотите, чтобы пользователи могли редактировать контент на каждом из этих сайтов, вам нужен уникальный интерфейс для всех этих сайтов администраторов?Например, чтобы позволить одному человеку иметь возможность редактировать контент на всех сайтах) Если нет, то, возможно, фреймворк Сайтов - это не тот путь, и вам лучше сделать каждый сайт независимым и четко разделенным?

Другое решениеэто посмотреть на разрешения возможности Django, которые позволяют вам определять пользовательские разрешения для ваших представлений.Я думаю (еще не пробовал) его также можно использовать для защиты просмотров администратора.

Надеюсь, это поможет.

0 голосов
/ 30 мая 2011

Приложение Django-site-permissions сделает именно это:

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

Вы можете интегрировать его в свой проект, если он соответствует вашим потребностям, или проверить исходный код, чтобы увидеть, как сайтширокие разрешения могут быть реализованы.

(отказ от ответственности: я разработчик приложения django-site-permissions)

...