Как ограничить вход в систему для уже зарегистрированных пользователей в Symfony2

access_control:
    - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/logout, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/recover-password, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/activate-account, roles: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/, roles: ROLE_USER }

Кажется, что access_control отлично работает для ограничения доступа для разных ролей, но мне нужно что-то вроде IS_AUTHENTICATED_ANONYMOUSLYonly&& ! ROLE_USER && ! ROLE_ADMIN.

Я не хочу, чтобы я уже вошел в систему, чтобы разрешить доступ к этому маршруту. Если это возможно из security.yml, было бы здорово.


person user1236048    schedule 02.08.2012    source источник
comment
Начиная с версии 2.4 вам не нужно JMSSecurityExtraBundle — Symfony добавила ExpressionLanguage, который позволяет защитить маршрут с помощью выражения с помощью allow_if свойство; например: allow_if: 'is_anonymous()'   -  person Darragh Enright    schedule 29.06.2015


Ответы (3)


JMSSecurityExtraBundle добавляет поддержку выражений.

Пример из документации:

access_control:
    - { path: ^/foo, access: "hasRole('FOO') and hasRole('BAR')" }

Дополнительная литература: Язык авторизации на основе выражений

person Florent    schedule 02.08.2012

Вы можете сделать именно то, что вы думали, что можете:

- { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICADED_FULLY }
person Daniel Ribeiro    schedule 26.04.2013

Ответ @drgomesp неверен. Поскольку незарегистрированный пользователь считается аутентифицированным анонимно, а полностью аутентифицированный пользователь также является анонимным пользователем. Посмотрите это:

- { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY && !IS_AUTHENTICADED_FULLY }

Это означает, что если я аутентифицирован анонимно, а также не анонимно аутентифицирован, покажите URL-адрес "^/". Это приведет к бесконечному циклу.

Я уже отвечал на этот вопрос здесь, проверьте решение: https://creativcoders.wordpress.com/2014/06/20/symonfy2-restrict-login-access-to-already-logged-users/

- { path: /login$, access: "!isAuthenticated()" }

Основа из официального документа http://jmsyst.com/bundles/JMSSecurityExtraBundle/master/expressions#usage-in-access-control

person Edouard Kombo    schedule 20.06.2014