Як використовувати вирази у безпеці, маршртутизації сервісах та валідації
Дата оновлення перекладу 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
.