Symfony2 Security.yml - PullRequest
       14

Symfony2 Security.yml

2 голосов
/ 31 января 2012

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

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

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

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?

Ответы [ 2 ]

9 голосов
/ 01 февраля 2012

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

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, который будет настоящим брандмауэром для приложения.Этот последний брандмауэр будет использовать ранее определенного провайдера пользователей и разрешать анонимных пользователей (важно!).

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

4 голосов
/ 04 февраля 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 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...