Я разрабатываю сайт на основе ZF2. У меня есть основная навигация, которая остается неизменной независимо от статуса посетителя/пользователя. Необходимо добавить еще один компонент/навигацию, который будет зависеть от статуса и роли пользователя. Для посетителя предметы будут
- регистр
- Авторизоваться
- EN (фактически раскрывающийся список с другим доступным языком)
Для вошедшего в систему обычного пользователя он будет отображать
- Профиль
- Выйти
- EN (селектор языка, как указано выше)
А для некоторых пользователей с определенными ролями/разрешениями будут дополнительные пункты
Я хочу использовать RBAC, так как ACL кажется раздутым, а также просто проверить, есть ли у текущего вошедшего в систему пользователя/роли дополнительные элементы, мне нужно загрузить полный ACL (и у нас есть около 15+ различных типов ролей).
Я потратил некоторое время на размышления о том, как я этого добился, поэтому ниже приведены некоторые идеи, которые у меня есть.
- Я создаю пустой навигационный контейнер и создаю фабрику. На фабрике я получаю доступ к аутентификации и RBAC и добавляю страницы в зависимости от статуса/роли пользователя.
- Я создаю полностью загруженную навигацию со всеми возможными страницами, затем в заводских условиях с помощью Аутентификации и RBAC скрываю страницы, которые не хочу показывать.
Вариант rd — использовать помощник представления, который получит RBAC через ServiceLayer и сгенерирует навигацию. (Как обсуждалось в ZF2, как отображать твиты в макете и ZF2: добавьте виджет входа в шаблон.
- Или я могу создать плагин-контроллер или просто метод в module.php и прослушать событие MVC_Render или MVC_Dispatch, сгенерировать желаемую навигацию и добавить вывод в переменную представления.
PS: мне нужно использовать частичное, так как мне нужно добавить класс CSS в раздел выбора языка. Также в макете будет отображаться навигация.