разрешения уровня объекта Django - PullRequest
6 голосов
/ 21 января 2012

Как вы гарантируете, что Пользователь может редактировать только созданные им объекты?Как лучше всего это настроить?

Я использую django-rest-framework и спрашиваю себя, могу ли я как-то ограничить пользователей в просмотре / редактировании объектов, которые им не принадлежат.

class Video(models.Model):
    owner = models.ForeignKey(User)
    ...

Таким образом, пользователь 'x' может редактировать видео только в своем файле owner_set.

1 Ответ

2 голосов
/ 21 января 2012

Предположительно, у вас есть сеансы и включена модель аутентификации.

Вы должны быть уверены, что все представления (REST и не-REST) ​​требуют аутентификации.

Длябез отдыха, это легко.Вы просто используете базовый @login-required декоратор везде.

Для Django-REST Framework прочитайте это: http://django -rest-framework.org / library / authentication.html # module-authentication .

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

Платформа поддерживает BASIC Authentication, для которой требуется безопасное соединение SSL.Реализовать DIGEST-аутентификацию, которая не требует SSL, не так уж сложно.

Избегайте сеансов.Это нарушает принцип REST для входа и выхода из системы.Инфраструктура поддерживает сеансы, но она не идеальна.

Как только все запросы будут аутентифицированы, вы узнаете пользователя.

Если вы знаете пользователя, то user.video_set работает отлично.Вы также можете использовать Video.objects.filter(...), чтобы убедиться, что вы запрашиваете пользователя, но легче подтвердить, что код верен, если вы работаете с user.video_set.get(...) или user.video_set.filter() или чем-то другим.

Все соответствующиепроверка авторизации производится в Views.Вы предоставляете представления для ваших ModelResources.

Это "представления на основе классов".Документация здесь: https://docs.djangoproject.com/en/dev/topics/class-based-views/#viewing-subsets-of-objects

Хитрость заключается в том, чтобы выбрать все нужные микшеры и сериализаторы.

Например, вы можете микшировать, получить обработку следующим образом:

http://django -rest-framework.org / howto / mixin.html

Фильтр будет реализован в методе get

...