Symfony настроки безопасности в security.yml

Это заметка о изначальном состоянии настроек безопасности в Symfony.

Конечно первым делом советую несколько раз прочитать информацию про безопасность, я не шучу, лучше сразу почитать!

Т.к. изначально ничего не понятно, о чем написано в файле app/config/security.yml, то я решил написать комментарии непосредственно в этом файле:

# важно:
# - все комментарии должны начинаться с 1 символа
# - все суб-настройки должны быть выстроены табами (или 4 пробела)
# - верхний файервол всегда более приоритетней нижнего
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 - просто название провайдера (можно написать windows_xp, потому что кроме как здесь нигде больше не значится)
        in_memory:
#         memory - стандартизированный Symfony-провайдер, означает что данные о пользователях будут записаны ниже обычным способом
            memory:
#             пользователи и их роли (users - стандартизированая переменная)
                users:
#                 в данном случае у нас 2 пользователя с разными ролями (которые присвоятся им в случае их успешной авторизации)
                    user:  { password: userpass, roles: [ 'ROLE_USER' ] }
                    admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }

#  firewalls - правила согласно которым Symfony будет отслеживать URI и реагировать на них для проверки доступа к ним
    firewalls:
#     dev - просто название фаервола (можно переименовать как Вам нравится)
        dev:
            pattern:  ^/(_(profiler|wdt)|css|images|js)/
            security: false

#     login - просто название фаервола (можно переименовать как Вам нравится)
        login:
#         не смотря на то, что страницы начинающиеся /demo/secured/ у нас под паролем (см. ниже), мы разрешим просмотр страницы /demo/secured/login
            pattern:  ^/demo/secured/login$
            security: false

#     secured_area - просто название фаервола (можно переименовать как Вам нравится)
        secured_area:
#         ВНИМАНИЕ: т.к. в этом фаерволе НЕ указано security: false - значит проверкой пароля займется выше описанный security: encoders: Symfony\Component\Security\Core\User\User: plaintext
#         В строке ниже указываем роутинги, которые требуют авторизации
            pattern:    ^/demo/secured/
            form_login:
#             login_path - стандартизированный Symfony-параметр указывающий место (имя роутинга), где лежит форма авторизации. Роутинг _demo_login указан в /src/Acme/DemoBundle/Controller/SecuredController.php:25 Если туда заглянуть, то мы увидим урл /login Т.е. все работает так: пользователь обращается к странице /login, Symfony просматривает /app/config/routing_dev.yml, видит там, что нужно поискать в /src/Acme/DemoBundle/Controller/SecuredController.php и видит в нем урл /login который соответствует методу loginAction(). В этом же методе можно проверять валидацию полей формы авторизации.
                login_path: _demo_login
#             check_path - стандартизированный Symfony-параметр указывающий место (имя роутинга) который проверяет логин/пароль. В данном случае указано _security_check - имя роутинга, которое прописано в /src/Acme/DemoBundle/Controller/SecuredController.php:43 Если туда заглянуть, то мы увидим урл /login_check Т.е. все работает так: пользователь обращается к странице /login_check, Symfony просматривает /app/config/routing_dev.yml, видит там, что нужно поискать в /src/Acme/DemoBundle/Controller/SecuredController.php и видит в нем урл /login_check который соответствует методу securityCheckAction()
                check_path: _security_check
#         урл-адреса, для деавторизации пользователя
            logout:
#             урл, где пользователь деавторизовывается
                path:   _demo_logout
#             урл, куда он попадает пользователь после успешной деавторизации ( если не указывать, то попадает на / )
                target: _demo
            #anonymous: ~
            #http_basic:
            #    realm: "Secured Demo Area"

    access_control:
        - { path: ^/demo/secured/hello/admin/, roles: ROLE_ADMIN }
        #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }

как видно, не все так просто, но надеюсь кому-то это поможет понять принцип работы Symfony, удачки!


17.10.2013 16:56

Комментарии

Битая ссылка на странице: "http://yapro.ru/web-master/php/symfony-nastroki-bezopasnosti-v-security-yml.html"
в строке:
"Конечно первым делом советую несколько раз прочитать информацию про безопасность, я не шучу, лучше сразу почитать!"
Алексей | 17.08.2017 05:38