Comment utiliser les expressions en matière de sécurité, de routage, de services et de validation
Symfony est livré avec un puissant langage d'expression composants. Il vous permet d'ajouter une logique personnalisée avancée à votre configuration. Le framework Symfony fait bon usage des expressions dans : ###### 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜#Service de configuration#🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜#; 🎜 🎜#Conditions de correspondance d'itinéraire
#🎜🎜 # 🎜#
(expliqué ci-dessous) et- Utilisez Allow_if pour le contrôle d'accès # ###### 🎜🎜#;#🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜 ## 🎜🎜# 🎜🎜#.
- Create³³Pour plus d'informations sur l'utilisation des clauses adverbiales : expressions, veuillez vous référer à #🎜🎜 ## 🎜🎜#Syntaxe d'expression .
- Sécurité : Utiliser des expressions complexes pour le contrôle d'accès #🎜 🎜#¶accepté sauf
ROLE_ADMIN
En plus de ce rôle, - également . Accepter
Expression
Object :use Symfony\Component\ExpressionLanguage\Expression;// ... public function indexAction(){ $this->denyAccessUnlessGranted(new Expression( '"ROLE_ADMIN" in roles or (user and user.isSuperAdmin())' )); // ...}
Dans cet exemple, si l'utilisateur actuel a
ROLE_ADMIN
ROLE_ADMIN
或者当前的用户对象的isSuperAdmin()
方法返回true
那么访问将被授权(注意:你的用户对象未必拥有isSuperAdmin
方法,这个方法只为此例出现)。这就用到了一个表达式,你还可以学习更多关于表达languange的语法,参考表达式语法。
在表达式中,你可以访问以各种变量:
user
- 用户对象(或者是
anon
,如果未经认证的话)。 roles
- 用户所拥有的角色数组,包括角色层级(角色层级)但是不包括
IS_AUTHENTICATED_*
属性(参考下面的功能)。 object
- 第二作为个参数传到
isGranted
方法的对象(如果有的话)。 token
- 令牌对象。
trust_resolver
AuthenticationTrustResolverInterface
接口,其对象是:可能你希望使用下面的is_*
ou l'objet utilisateur actuelisSuperAdmin() code>
renvoie
🎜 méthode, cette méthode n'apparaît que pour cet exemple). 🎜🎜true
puis l'accès sera autorisé (remarque : votre objet utilisateur n'a peut-être pasisSuperAdmin code>
🎜🎜🎜🎜Cela utilise une expression. Vous pouvez également en savoir plus sur la syntaxe d'expression du langage, reportez-vous à 🎜🎜🎜🎜syntaxe d'expression🎜🎜🎜🎜. 🎜🎜🎜🎜🎜🎜Dans les expressions, vous pouvez accéder à diverses variables : 🎜🎜🎜user
🎜- 🎜🎜Objet utilisateur (ou 🎜🎜
anon
🎜🎜 si non authentifié). 🎜🎜🎜 rôles
🎜- 🎜🎜Tableau de rôles détenus par l'utilisateur, y compris 🎜🎜🎜🎜Role level🎜🎜🎜🎜 (niveau de rôle) mais n'inclut pas l'attribut 🎜🎜
IS_AUTHENTICATED_*
🎜🎜 (voir la fonction ci-dessous ). 🎜🎜🎜 object
🎜- 🎜🎜Le deuxième paramètre est passé à la méthode 🎜🎜
isGranted
🎜🎜 objet (le cas échéant). 🎜🎜🎜 jeton
🎜- 🎜🎜Objet jeton. 🎜🎜🎜
trust_resolver
🎜AuthenticationTrustResolverInterface
🎜🎜Interface, son objet est : Peut-être souhaitez-vous utiliser ce qui suit 🎜🎜est_*
🎜🎜 fonction à la place. 🎜🎜🎜🎜🎜🎜🎜 De plus, vous pouvez accéder à diverses fonctions dans les expressions : 🎜🎜🎜est_authentifié
is_authenticated
- 返回
true
,如果用户通过“记住我”或“完全”身份认证通过的话 - 比如,如果用户已登录,就返回true。 is_anonymous
- 于等同在
isGranted
函数中使用IS_AUTHENTICATED_ANONYMOUSLY
。 is_remember_me
- 类似但不完全等同于
IS_AUTHENTICATED_REMEMBERED
,见下文。 is_fully_authenticated
- 类似但不完全等同于
IS_AUTHENTICATED_FULLY
,见下文。 has_role
- 查看一个用户是否拥有给定的ROLE - 等同于一个这样的表达式
'ROLE_ADMIN' in roles
。
is_remember_me
🎜🎜 fonction 🎜🎜🎜🎜 🎜Seulement si 🎜🎜🎜🎜🎜Renvoie vrai lorsque l'utilisateur réussit l'authentification du cookie Remember_me, et 🎜🎜is_fully_authenticated
🎜🎜🎜Seulement si l'utilisateur 🎜🎜🎜🎜🎜 est dans le cycle de session (comme un utilisateur à part entière ) True ne sera renvoyé que si l'état de connexion est réussi. 🎜🎜🎜🎜🎜🎜🎜
estGranted