середу, 5 червня 2013 р.

Безпека Symfony

При відкриття певної не публічної сторінки спочатку ідентифікується користувач, перевіряється його аутентичність (authentication) і аж після цього перевіряється чи має право він переглядати сторінку, тобто авторизується (authorization).

HTTP аутентифікація

Компонент безпеки може налаштовується у файлі app/config/security.yml .
У прикладі нижче налаштовується обмеження доступу до каталогу /admin/* . Облікові дані запитуються у користувача за допомогою (старої-доброї) HTTP аутентифікації:

# app/config/security.yml
security:
    firewalls:
        secured_area:
            pattern:    ^/
            anonymous: ~
            http_basic:
                realm: "Secured Demo Area"

    access_control:
        - { path: ^/admin, roles: ROLE_ADMIN }

    providers:
        in_memory:
            memory:
                users:
                    ryan:  { password: ryanpass, roles: 'ROLE_USER' }
                    admin: { password: kitten, roles: 'ROLE_ADMIN' }

    encoders:
        Symfony\Component\Security\Core\User\User: plaintext

В результаті ми отримаємо повнофункціональну систему безпеки, яка:

  • Має два користувачі (ryan і admin);
  • Користувачі аутентифікуються за допомогою діалогу HTTP аутентифікації;
  • Будь який URL, що містить /admin/* має закритий доступ і тільки admin може туди ввійти;
  • Всі решта URL, які не містять /admin/* доступні всім користувачам (тобто для їх перегляду не потрібно вводити логін і пароль у діалог HTTP аутентифікації;

Отже розглянемо детальніше як це працює.

Аутентифікація

Система безпеки активується коли користувач хоче получити доступ до закритої сторінки. Спочатку визначається чи потрібно користувачу пройти аутентифікацію і якщо так, тоді вона здійснюється.
Firewall Symfony активується, якщо адреса запиту відповідає шаблону файлу конфігурації. Та це ще не значить, що появляється діалог аутентифікації.
Процес аутентифікації залежить від механізму, який ви використовуєте. Наприклад якщо використовувати механізм форм, то користувач перенаправляється на сторінку входу. Якщо ж ви використовуєте HTTP аутентифікацію то користувач отримує відповідь HTTP 401 (Unauthorized) для того, щоб браузер вивів діалог входу.

Авторизація

У файлі конфігурації безпеки кожному шаблону ставиться у відповідність певна роль (наприклад ROLE_ADMIN) яку повинен мати користувач, щоб отримати доступ до сторінки.


У наступному приклад користувач ryan успішно проходить аутентифікацію, але оскільки він не має прав адміністратора (ROLE_ADMIN) то не може получити доступ до /admin/foo.
У цьому разі користувачу надсилається відповідь HTTP 403 (Forbidden), яку ви можете оформити на свій смак.