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, с пользовательской стратегией

я надеюсь, что это поможет вам:)

Другие вопросы по тегам