Django разрешения, код сами или использовать приложение? - PullRequest
6 голосов
/ 07 ноября 2011

Этот вопрос (я думаю) о разрешениях уровня объекта / строки в Django.

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

Кроме того, пользователи должны иметь возможность удалять контент, который принадлежит им самим. Судя по документации Django, стандартная структура не поддерживает разрешения для экземпляров.

Должны ли мы использовать «пустой» API, предоставляемый Django, или использовать для этого приложение, такое как django-guardian, django-rules и т. Д.? Какие из них вы бы порекомендовали в этом случае?

Спасибо!

Ответы [ 2 ]

11 голосов
/ 07 ноября 2011

вы не сможете запускать тему, пока не отправите столько и столько ответов.

Для этого вам не нужно использовать разрешения для каждого объекта.На самом деле вам не нужно использовать разрешения для этого вообще.Просто проверьте, соответствует ли пользователь требованиям ваших представлений.

Или вы можете использовать стандартный механизм доступа django.Создайте разрешения, такие как «Начать тему», затем настройте сигналы, чтобы отслеживать, когда пользователи добавляют ответы.Когда выдается сингал, проверьте, достаточно ли у пользователя ответов и дайте ему разрешение «Начать тему».

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

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

Это можно сделать с разрешениями для каждого объекта.Но если это единственная причина их использования, тогда я просто добавлю поле author к вашим моделям и использую простую проверку item.author == request.user, чтобы проверить, может ли пользователь удалить элемент.

Итак, мой общийСовет должен быть простым.Проанализируйте свои потребности.Разрешения для каждого объекта - это мощный инструмент, который может оказаться излишним в вашей ситуации.

2 голосов
/ 07 ноября 2011

Я рекомендую вам пойти с Джанго-хранителем.

  1. Джанго-хранитель

    Отлично, DRY , поддерживаемое и хорошо протестированное приложение, которое решает проблему. На сегодняшний день это наиболее поддерживаемая и активно развивающаяся библиотека для реализации разрешений для каждого объекта.

    В настоящее время мы используем django-guardian в одном из наших крупных проектов и очень довольны стабильностью и функциональностью.

    Исходный код Django-guardian очень прост и легок для понимания, поскольку он построен на коде разрешения в ядре Django.

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

  2. Библиотека разрешений для каждого объекта OSU Open Source Lab

    Это скорее отдельное приложение, чем Django-guardian, и поддерживает более старые версии Django. Это приложение относительно хорошо поддерживается. (Лично я не использовал его.)

  3. Другие решения из более старых сообщений .

    Но большинство из них в плохом состоянии.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...