Як використовувати вирази у безпеці, маршртутизації сервісах та валідації
Дата оновлення перекладу 2023-06-22
Як використовувати вирази у безпеці, маршртутизації сервісах та валідації
Symfony має потужний компонент ExpressionLanguage. Він дозволяє вам додавати високоналаштовувану логіку всередині конфігурації.
Фреймворк Symfony використовує вирази одразу після установки наступними способами:
- Конфігурація сервісів;
- Умови співпадіння маршуртів;
- Перевірка безпеки (пояснюється нижче) та доступ до контролю за допомогою allow_if ;
- Валідація.
Щоб дізнатися більше про те, як створювати та працювати з виразами, див. Синтаксис .
Безпека: Складний контроль доступу за допомогою виразів
На додаток до ролі на кшталт ROLE_ADMIN, метод isGranted() також приймає
об'єкт Expression:
1 2 3 4 5 6 7 8 9 10 11
use Symfony\Component\ExpressionLanguage\Expression;
// ...
public function indexAction()
{
$this->denyAccessUnlessGranted(new Expression(
'"ROLE_ADMIN" in roles or (user and user.isSuperAdmin())'
));
// ...
}
У цьому прикладі, якщо поточний користувач має ROLE_ADMIN або якщо метод
об'єкта поточного користувача isSuperAdmin() повертає true, тоді
доступ буде дозволено (примітка: ваш об'єкт користувача може не мати методу
isSuperAdmin(), цей метод був придуманий для цього прикладу).
Використовується вираз, і ви можете дізнатися більше про синтаксис мови виразів, див. Синтаксис .
Всередині виразу у вас є доступ до таких змінних:
user-
Об'єкт користувача (або рядок
anon, якщо ви не аутентифіковані). roles-
Масив ролей, які має користувач, включно з
ієрархією ролей , але не включаючи атрибути
IS_AUTHENTICATED_*(див. функції нижче). object-
Об'єкт (якщо він є), який передається як другий аргумент
isGranted(). token- Об'єкт мітки.
trust_resolver-
Об'єкт AuthenticationTrustResolverInterface:
ви швидше за все будете використовувати функції
is_*()нижче.
Додатково у вас є доступ до багатьох функцій всередині додатка:
is_authenticated-
Повертає
trueякщо користувач аутентифікований за допомогою "запам'ятати мене" або аутентифікований "повністю", тобто повертає "true" якщо користувач "виконав вхід". is_anonymous-
Прирівнюється до використання
IS_AUTHENTICATED_ANONYMOUSLYз функцієюisGranted(). is_remember_me-
Схоже, але не дорівнює
IS_AUTHENTICATED_REMEMBERED, див. нижче. is_fully_authenticated-
Схоже, але не дорівнює
IS_AUTHENTICATED_FULLY, див. нижче. has_role-
Перевіряє, чи має користувач роль - еквівалент виразу на кшталт
'ROLE_ADMIN' in roles.