Будет ли Django хорошим выбором для веб-приложения на основе разрешений? - PullRequest
14 голосов
/ 24 октября 2008

Я изучаю детали Django уже около недели и мне нравится то, что я вижу. Однако я столкнулся с некоторым ... негативом в отношении детального контроля разрешений для интерфейса CRUD.

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

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

Позволит ли Django создавать пользовательские разрешения / правила и легко интегрировать их в интерфейс администратора CRUD?

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

Обновление два:

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

Клиент может принадлежать одному или нескольким «магазинам». Сотрудники, занятые полный рабочий день, должны иметь возможность редактировать клиентов только в своем магазине (даже если они принадлежат другому магазину). Однако они не должны иметь возможность видеть / редактировать клиентов в другом магазине. Случайные должны иметь возможность просматривать клиентов только в зависимости от того, в каком магазине они тоже зарегистрированы (или если случайный пользователь вошел в систему как пользователь магазина - скорее всего).

Управляющим над ними необходимо видеть всех сотрудников магазинов, которыми они управляют, и ничего более.

Старшее руководство должно иметь возможность редактировать ВСЕХ сотрудников и предоставлять разрешения под собой.

После прочтения документации django говорится, что вы не можете (автоматически) устанавливать разрешения для подмножества группы. Только вся группа. Достаточно ли легко смоделировать ваши собственные разрешения для этой цели?

Ответы [ 6 ]

8 голосов
/ 26 октября 2008

Если я правильно прочитал ваши обновленные требования, я не думаю, что существующая система аутентификации Django будет достаточной. Похоже, вам нужна полноценная система ACL.

Эта тема поднималась несколько раз. Попробуйте прибегнуть к помощи django + acl.

Случайные выборки ...

Несколько лет назад был проект Summer of Code, но я не уверен, куда они делись. Смотри http://code.djangoproject.com/wiki/GenericAuthorization

На djngoproject.org есть новый билет, который может быть интересен:

Есть несколько интересных фрагментов кода на dumpz.org:

.

... но документов нет.

Удачи!

4 голосов
/ 24 октября 2008

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

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

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

А если вам этого недостаточно, надстройка профиля предоставляет вам еще больше возможностей для определения «пользователя» и его возможностей, разрешений, ролей, обязанностей и т. Д.

А если вам этого недостаточно, вы можете определить свои собственные схемы аутентификации.


Важно не пытаться определять группы, которые являются фактическими подмножествами пользователей, а не случайно определенные заголовки или роли. Вам никогда не нужно «устанавливать разрешения для подмножества группы». Вы должны иметь меньшие группы. Группы, определенные вокруг подмножеств людей.

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

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


Если вы не можете сделать это с помощью системы разрешений Django, вам следует пересмотреть свои варианты использования. Серьезно.

[Интерфейс Django-REST, однако, является совершенно другим зверем и требует некоторого ухода и питания.]

3 голосов
/ 24 октября 2008

ModelAdmin объекты имеют has_add_permission, has_change_permission, has_delete_permission и queryset методы, которые можно использовать для обеспечения прав доступа к тому, что вошедший в систему пользователь может видеть и изменять - вы можете создать подкласс, который использует их для реализации любых разрешений, которые вы хотите реализовать, и регистрирует все ваши модели в приложении admin, используя ваш подкласс.

Однако все зависит от того, как именно будет работать ваша система разрешений - каковы точные требования, которые выпадают из ваших подробных разрешений? Чем больше вы отдаляетесь от того, для чего предназначено приложение admin, тем больше работы он будет выполнять, но есть много ловушек, которые вы можете использовать для реализации своих пользовательских требований. Вот сообщение в блоге от Luke Plant , в котором приведены примеры некоторых тонких настроек, которые вы можете выполнить без необходимости копать слишком глубоко.

Обязательно ли оно должно основываться на приложении admin? Общие представления и ModelForms могут позаботиться о многих утомительных деталях, связанных с реализацией CRUD, поэтому будьте осторожны из-за слишком одержимости настройкой admin - это почти традиция Django - начинать с зацикливания на приложении admin и на том, что оно может и не может делать, изначально думая, что вам больше никогда не придется писать код;)

2 голосов
/ 10 августа 2011

В django 1.2 есть поддержка разрешений на уровне строк, которые django-guardian делает очень интуитивно понятными.

0 голосов
/ 27 августа 2009

Я только что нашел http://bitbucket.org/jezdez/django-authority/, выглядит многообещающе.

0 голосов
/ 27 ноября 2008

Вы также можете взглянуть на monkeypatch для гранулярных разрешений: http://code.google.com/p/django-granular-permissions/

Добавляет разрешения на уровне строк в систему разрешений django.

...