如何在安全,路由,服务和验证中使用表达式
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 2.6,现已不再维护。
考虑将您的项目升级到Symfony 6.2。ob娱乐下载
如何在安全,路由,服务和验证中使用表达式
在Syob娱乐下载mfony 2.4中,一个强大的ExpressionLanguage组件被添加到Symfony。ob娱乐下载这允许我们在配置中添加高度定制的逻辑。
Symfob娱乐下载ony框架以以下方式利用表达式:
- 配置服务;
- 路由匹配条件;
- 检查安全(下文解释)和使用allow_if访问控制;
- 验证。
有关如何创建和使用表达式的详细信息,请参见表达式语法。
安全性:带有表达式的复杂访问控制
除了一个角色喜欢ROLE_ADMIN
,isGranted
方法也接受表达式对象:
1 2 3 4 5 6 7 8 9 10 11
使用ob娱乐下载\组件\ExpressionLanguage\表达式;/ /……公共函数indexAction(){$这->denyAccessUnlessGranted (新表达式(' '角色中的' ROLE_ADMIN '或(user和user. issuperadmin ())'));/ /……}
在本例中,如果当前用户有ROLE_ADMIN
或者当前用户对象的isSuperAdmin ()
方法返回真正的
,然后将授予访问权限(注意:您的User对象可能没有isSuperAdmin
方法,该方法是为本例发明的)。
这使用一个表达式,您可以了解表达式语言语法的更多信息,请参见表达式语法。
在表达式中,你可以访问一些变量:
-
用户
-
用户对象(或字符串)
另一次
如果你没有经过认证)。 -
角色
-
用户拥有的角色数组,包括角色层次结构但不包括
IS_AUTHENTICATED_ *
属性(请参阅下面的函数)。 -
对象
-
作为第二个参数传递给的对象(如果有)
isGranted
。 -
令牌
- 令牌对象。
-
trust_resolver
-
的AuthenticationTrustResolverInterface,对象:您可能会使用
is_ *
代替下面的函数。
此外,你还可以访问表达式中的一些函数:
-
is_authenticated
-
返回
真正的
如果用户通过“记住我”或“完全”身份验证,即如果用户“登录”则返回true。 -
is_anonymous
-
等于使用
IS_AUTHENTICATED_ANONYMOUSLY
与isGranted
函数。 -
is_remember_me
-
相似,但不等于
IS_AUTHENTICATED_REMEMBERED
,见下文。 -
is_fully_authenticated
-
相似,但不等于
IS_AUTHENTICATED_FULLY
,见下文。 -
has_role
-
检查用户是否具有与表达式类似的给定角色
角色中的'ROLE_ADMIN'
。
is_remember_me
和检查是不同的IS_AUTHENTICATED_REMEMBERED
的is_remember_me
而且is_authenticated_fully
函数是类似的使用IS_AUTHENTICATED_REMEMBERED
而且IS_AUTHENTICATED_FULLY
与isGranted
函数-但它们是不相同的。区别如下:
1 2 3 4 5 6 7 8 9
使用ob娱乐下载\组件\ExpressionLanguage\表达式;/ /……$交流=$这->get (“security.authorization_checker”);$access1=$交流->isGranted (“IS_AUTHENTICATED_REMEMBERED”);$access2=$交流->isGranted (新表达式('is_remember_me() or is_fully_authenticated()'));
在这里,access1美元
而且access2美元
将是相同的值。不像IS_AUTHENTICATED_REMEMBERED
而且IS_AUTHENTICATED_FULLY
,is_remember_me
函数只有如果用户通过remember-me cookie进行身份验证,则返回trueis_fully_authenticated
只有如果用户在此会话期间实际登录(即是成熟的),则返回true。