Symfony2: Как защитить приложение с помощью _locale - PullRequest
9 голосов
/ 21 августа 2011

Все!Я хотел бы защитить свое приложение вместе с системой безопасности.Ниже файла security.yml

security:
  encoders:
    Symfony\Component\Security\Core\User\User: plaintext

  role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]

  providers:
    in_memory:
      users:
        user:  { password: userpass, roles: [ 'ROLE_USER' ] }
        admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }

  firewalls:
    dev:
      pattern:  ^/(_(profiler|wdt)|css|images|js)/
      security: false

    login:
      pattern:  ^/{_locale}/demo/secured/login$
      security: false

    secured_area:
      pattern:    ^/{_locale}/demo/secured/
      form_login:
        check_path: /{_locale}/demo/secured/login_check
          login_path: /{_locale}/demo/secured/login
        logout:
          path:   /{_locale}/demo/secured/logout
          target: /{_locale}/demo/

Проблема:

logout-> target return не работает.Кто-нибудь может мне помочь?

PS: Любые примеры будут оценены!

Thx

1 Ответ

15 голосов
/ 21 августа 2011

Просто убедитесь, что вы определили маршруты для всех них, которые используют переменную locale, и безопасность, кажется, подхватывает их автоматически. Нет необходимости учитывать локаль в конфигурации безопасности.

Вот пример из моего проекта.

Выдержка из security.yml:

    login:
        pattern:  /(game|admin)/login$
        security: false

    admin:
        pattern:    /admin/
        form_login:
            check_path: /admin/login_check
            login_path: _admin_login
        logout:
            path:   _admin_logout
            target: _home

    game:
        pattern:    /game/
        form_login:
            check_path: /game/login_check
            login_path: _game_login
        logout:
            path:  _game_logout
            target: _home

Выдержка из routing.yml:

BrowserMMOSecurityBundle:
    resource: "@BrowserMMOSecurityBundle/Controller/"
    type:     annotation
    prefix:   /{_locale}/
    defaults: { _locale: en }
    requirements:
        _locale: en|fr

_game_login_check:
    pattern:   /game/login_check

_admin_login_check:
    pattern:   /admin/login_check

_admin_logout:
    pattern:   /{_locale}/admin/logout
    requirements:
        _locale: en|fr

_game_logout:
    pattern:   /{_locale}/game/logout
    requirements:
        _locale: en|fr

Приведенный выше конфиг работает на меня. Стоит также отметить, что маршруты _admin_login и _game_login определены в аннотациях моего класса SecurityController.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...