Symfony2 Security.yml

Я пытаюсь воспользоваться возможностями аутентификации и авторизации Symfony, однако я несколько запутался в том, как должен выглядеть мой файл security.yml.

Я ищу для достижения следующих целей:

1) Маршруты / и /join (доступны всем - авторизация не требуется).

2) все остальные маршруты требуют ввода логина/пароля.

3) маршрут /adimin должен быть ограничен только пользователями-администраторами.

4) все пользователи должны быть аутентифицированы в базе данных.

С пунктом 4 разобрался (кажется) - см. ниже. Я не уверен, что означает слово administrators:. Означает ли это, что только администраторы используют класс User? Должен ли он говорить users: или что-то еще?

security:
    encoders:
        MySite\Bundle\Entity\User:
            algorithm: sha1
            encode_as_base64: false
            iterations: 1

providers:
    administrators: (??? what doest his mean ???)
        entity: { class: MySiteBundle:User }

Важнее --

Для пунктов 1, 2 и 3 я не уверен, что поставить. У меня есть куча записей в разделах firewalls: и access_control:, однако это просто не работает или не имеет смысла. Может ли кто-нибудь опубликовать, как должен выглядеть файл security.yml только по целям, которые я хочу достичь в цифрах 1–3?


person ElasticThoughts    schedule 31.01.2012    source источник


Ответы (2)


Вот пример конфигурации из того, что я понял из ваших потребностей:

security:
    encoders:
        "MySite\Bundle\Entity\User": { algorithm: sha1, encode_as_base64: false, iterations: 1 }

    providers:
        database: { entity: "MySite\Bundle\Entity\User" }

    firewalls:
        dev:
            pattern:    ^/(_profiler|_wdt|css|js)
            security:   false

        main:
            pattern:    ^/
            provider:   database
            anonymous:  true
            # the rest of your firewall's config

    access_control:
      - { path: ^/(join)?$, roles: IS_AUTHENTICATED_ANONYMOUSLY }
      - { path: ^/, roles: IS_AUTHENTICATED_FULLY }

Мы настраиваем кодировщик паролей для пользовательского объекта и определяем для него провайдера.

Затем мы определяем брандмауэр dev для деактивации защиты путей отладки/профилирования/активов и main, который будет настоящим брандмауэром для приложения. Этот последний брандмауэр будет использовать ранее определенный провайдер пользователей и разрешать анонимных пользователей (важно!).

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

person Herzult    schedule 01.02.2012

Для всех, кто задает этот или аналогичный вопрос, мне удалось заставить это работать, используя следующие настройки в security.yml.

security:
    encoders:
        MySite\Bundle\Entity\User:
          algorithm: sha1
          encode_as_base64: false
          iterations: 1

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

    providers:
        database:
            entity: { class: MySiteBundle:User }

    firewalls:
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false
        prod:
            pattern: ^/
            provider: database
            anonymous: true
            form_login:
                check_path: /login_check
                login_path: /login
                default_target_path: /home
                always_use_default_target_path: true
            logout:
                path:   /logout
                target: /

    access_control:
        - { path: ^/admin, roles: ROLE_ADMIN }
        - { path: ^/build, roles: ROLE_USER }
        - { path: ^/join, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY }
person ElasticThoughts    schedule 03.02.2012