支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
Symfony自带了强力的 ExpressionLanguage 组件。它允许你在配置中添加高级自定义逻辑。
Symfony 框架在以下方面很好地利用了表达式:
关于创建和使用表达式的更多内容请参考 表达式语法。
除了接受 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
或者当前的user对象的 isSuperAdmin()
方法返回 true
那么访问将被授权 (注意:你的User对象未必拥有 isSuperAdmin
方法,这个方法只为此例出现)。
这就用到了一个表达式,你还可以学习更多关于expression languange的语法,参考 表达式语法。
在表达式中,你可以访问以各种变量:
user
anon
,如果未经认证的话)。roles
IS_AUTHENTICATED_*
属性(参考下面的功能)。object
isGranted
方法的对象(如果有的话)。token
trust_resolver
AuthenticationTrustResolverInterface
接口,其对象是:你可能希望使用下面的 is_*
函数来替代。另外,你可以在表达式中访问各种函数:
is_authenticated
true
,如果用户通过"remember-me"或是"fully"身份认证通过的话 - 比如,如果用户已登录,就返回true。is_anonymous
isGranted
函数中使用 IS_AUTHENTICATED_ANONYMOUSLY
。is_remember_me
IS_AUTHENTICATED_REMEMBERED
,见下文。is_fully_authenticated
IS_AUTHENTICATED_FULLY
,见下文。has_role
'ROLE_ADMIN' in roles
.本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。