Symfony2 access_control с маршрутами i18n
У меня есть проект symfony2, где у меня есть раздел для зарегистрированных пользователей. После интернационализации сайт существует на 5 разных языках. Из-за области членства у меня есть длинный список правил access_control в security.yml, и до этого момента я не мог упростить список acl, и если придет новый язык, мне придется снова добавить все правила acl с переведенным маршруты. Например, маршрут по умолчанию - /help, для чего нужен ROLE_USER, но на немецком языке этот маршрут - /hilfe.
Есть ли более простой способ справиться с этим, как скопировать переведенные пути?
2 ответа
Привет, ваше веб-приложение только для зарегистрированных пользователей? В этом случае вы можете просто установить access_control следующим образом:
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
- { path: ^/, role: ROLE_USER }
Или вы можете добавить префикс для вашей роли. Означает, что все соответствует / требуется пользователь /* ROLE_USER
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/admin/, role: ROLE_ADMIN }
- { path: ^/user/, role: ROLE_USER }
Надеюсь, что это помогает, даже не точный ответ на ваш вопрос
Как говорит @jan Dockal, вы можете использовать регулярные выражения в path. с помощью регулярных выражений вы можете установить роль для любого URL, который macth ^/user/
которые хотят совпадать /user/help
а также /user/hilfe
,
но я предлагаю вам использовать пакет JMS, с пользовательской стратегией
я надеюсь, что это поможет вам:)