Комментарии 9
НЛО прилетело и опубликовало эту надпись здесь
Спасибо за статью. Еще можно было бы использовать RBAC + бизнес правила. Мне кажется, хорошо подходит для вашей задачи. В yii2 работает из коробки. С symphony я не работал, к сожалению, но навеняка есть бандл для работы с rbac
0
Каюсь, не описал данный аспект в статье)
В symfony RBAC тоже работает из коробки, и раньше он меня всегда устраивал. Но в этом проекте администратор должен иметь возможность отредактировать любые привилегии каждой роли, а это, на минуточку, 13*7 + 8 глобальных привилегий. Код уже начинает попахивать… Плюс то, что у пользователя может быть несколько из ~20 «настоящих» что-то значащих ролей, и у каждой из них есть ворох ролей, описывающих их привилегии. А если бы заказчик захотел бы добавить/удалить некоторые из них (пусть тот, у кого такого не было первый кинет в меня камень)? Я же застрелился бы!
В symfony RBAC тоже работает из коробки, и раньше он меня всегда устраивал. Но в этом проекте администратор должен иметь возможность отредактировать любые привилегии каждой роли, а это, на минуточку, 13*7 + 8 глобальных привилегий. Код уже начинает попахивать… Плюс то, что у пользователя может быть несколько из ~20 «настоящих» что-то значащих ролей, и у каждой из них есть ворох ролей, описывающих их привилегии. А если бы заказчик захотел бы добавить/удалить некоторые из них (пусть тот, у кого такого не было первый кинет в меня камень)? Я же застрелился бы!
0
Года 3 назад у меня был проектик со схожей ситуацией, писался на Yii с его RBAC. Там было где-то 7 ролей, но сложные правила вроде «пользователь может паблишить айтем только если его заапрувило минимум два чувака с такой-то ролью или один чувак с другой ролью». Ну и таких правил было не мало. На Yii вышло ужасно. А догадаться сделать цепочку обязанностей (что собственно воутеры из себя и представляют) на тот момент я не догадался.
0
Спасибо, буду иметь ввиду
0
Всё же следует различать, где безопасность (информационная), а где бизнес-логика. Правило, которое вы описали, выглядит как ограничение бизнес-процессов, а не как правило безопасности.
0
Спасибо за статью. Читал ее месяц назад, но ктож знал что что она пригодится так скоро.
Voter может быть полезен при использования SonataAdminBundle.
В конфигах включаешь проверку
и в Voter::getSupportedAttributes() можно возвращать стандартные роли типа:
это позволит управлять доступом в админке без явного вызова функции denyAccessUnlessGranted и не меняя код админки вообще
Voter может быть полезен при использования SonataAdminBundle.
В конфигах включаешь проверку
security:
access_decision_manager:
strategy: unanimous
и в Voter::getSupportedAttributes() можно возвращать стандартные роли типа:
- ROLE_SONATA_USER_ADMIN_USER_VIEW
- ROLE_SONATA_USER_ADMIN_USER_EDIT
- ROLE_ACME_ADMIN_DEMO_VIEW
- ROLE_ACME_ADMIN_DEMO_EDIT
это позволит управлять доступом в админке без явного вызова функции denyAccessUnlessGranted и не меняя код админки вообще
+1
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Symfony2 Voters и Doctrine Filters на страже безопасности