Как сделать работающими несколько firewall в симфони?

Всем привет!

В приложении две формы, две сущности - админ и юзер (сразу оговорюсь, что в одну соединить их не хочу да и не могу, хоть это и решило бы проблему).

По отдельности фаерволы работают отлично, но если закодить их вместе, то второй, который нижний (user) отказывается выполнять check_path и просто рендерит заново страницу логина без вывода ошибок. Если поменять admin и user фаерволы в коде местами, то глючить начинает тот, который окажется внизу, что как бы намекает, но всё равно не могу понять в чём ошибка. Пробовал экспериментировать с pattern фаервола (кстати так и нашёл подробной инфы за что он отвечает, в документации лишь общие фразы) - эффекта не дало, кроме различных багов.

# app/config/security.yml
security:
    encoders:
        user_provider:
            class: UserBundle\Entity\User 
            algorithm:            plaintext
            ignore_case:          false
        admin_provider:
            class: AdminBundle\Entity\Admin
            algorithm:            plaintext
            ignore_case:          false
        Symfony\Component\Security\Core\User\User: plaintext

    role_hierarchy:
        ROLE_ADMIN: ROLE_USER
        ROLE_ROOT: ROLE_ADMIN

    providers:
        administration_provider:
            chain:
                providers: [root_provider, admin_provider]
        root_provider:
            memory:
                users:
                    test@test.ru: 
                        password: 123
                        roles: 'ROLE_ROOT'
        admin_provider:
            entity:
                class: AdminBundle:Admin
                property: email
        user_provider:
            entity:
                class: UserBundle:User
                property: email

    firewalls:
        admin:
            pattern: ^/
            anonymous: ~
            form_login:
                login_path: admin
                check_path: admin
                default_target_path: dashboard
                provider: administration_provider
            logout:
                path:   admin_logout
                target: /admin
        user:
            pattern: ^/
            anonymous: ~
            form_login:
                login_path: login
                check_path: login
                default_target_path: profile
                provider: user_provider
            logout:
                path:   user_logout
                target: /

    access_control:
        - { path: ^/dashboard, role: ROLE_ADMIN }
        - { path: ^/profile, role: ROLE_USER }
        - { path: /.*, role: IS_AUTHENTICATED_ANONYMOUSLY }


Буду очень признателен, если подскажете где моя ошибка
  • Вопрос задан
  • 519 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы