Будет ли Django хорошим выбором для веб-приложения, основанного на разрешениях?

StackOverflow https://stackoverflow.com/questions/232008

  •  04-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Обновление второе:

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

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

Удачи!

Другие советы

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

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

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

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

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

<Ч>

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

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

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

<Ч>

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

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

Объекты

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top