Обновить

Комментарии 5

Че то дичь какая-то. В админке рекомендация на управление полями формы set(fields).Что? Sets are unordered. Что получим? Правильно, получим мешанину полей в форме.

Да и вообще идея: вычислять права доступа на лету это такое.... У меня сто тяжелых в инициации объектов. к одному доступ есть. Остальные даже видеть нельзя. Что получим? Правильно, получим инициациию 100 обьектов для пользователя и 99 выбросим в пропасть.

Ну и не использовать генераторы тоже так себе идея. Зачем создавать лист урезанных полей в админке, когда проще повесить снаружи super() генератор и выдать поля тогда, когда надо.

Вероятно, что то в самой идее есть: менеджер прав пользователя на обьекте. Но как-то не так это должно работать.

Согласен, примеры подустарели, поправлю, особенно насчет полей. В оправдание скажу, что система не занимается управлением доступом на уровне полей (что является одним из возможных направлений развития). В отличие от исходного кода, в README приведен упрощенный пример. Тем не менее, управление доступом полями в нем нужно видимо вовсе исключить, чтобы не вводить в заблуждение читателей.

Что касается вычисления прав "на лету", то этим страдает как раз таки родная джанговская система управления правами, когда на полном серьезе предлагает вычислять их как user.has_perm(..., obj) на инстансе модели (в то время как данный пакет сохраняет использование has_perm() только для обратной совместимости с проектами третьих сторон). Поэтому никакой инициализации 100 объектов для пользователя не произойдет. Объекты будут отобраны на этапе чтения из БД, и на выходе запрос выдаст только один инициализированный из базы объект.

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

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

Поправил описание в README. Детальные примеры можно посмотреть в коде пакета, в каталоге examples. Там все давно переделано так, как надо. Если есть идеи или поправки, приглашаю в контрибуторы.

НЛО прилетело и опубликовало эту надпись здесь

Статью я уже писал, см. по ссылке, с тех пор мало что изменилось.

Хабр обещал отделять новости от статей, ну я и написал новость, и пометил как новость. Какой еще контент нужен в новости? Есть событие - расширена совместимость пакета. Вот вам новость об этом. Яхз, что тут еще можно написать-то.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

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