安全性:带有表达式的复杂访问控制

编辑本页

警告:您正在浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 3.4,现已不再维护。

本页的更新版本用于Sy欧宝娱乐app下载地址mfony 6.2(当前稳定版本)。

安全性:带有表达式的复杂访问控制

另请参阅

处理复杂授权规则的最佳解决方案是使用投票系统

除了一个角色喜欢ROLE_ADMIN,isGranted ()方法也接受表达式对象:

1 2 3 4 5 6 7 8 9 10 11
使用欧宝娱乐app下载地址组件ExpressionLanguage表达式/ /……公共函数indexAction()->denyAccessUnlessGranted (表达式(' '角色中的' ROLE_ADMIN '或(不是is_anonymous()和user.isSuperAdmin())'));/ /……

在本例中,如果当前用户有ROLE_ADMIN或者当前用户对象的isSuperAdmin ()方法返回真正的,然后将授予访问权限(注意:您的User对象可能没有isSuperAdmin ()方法,该方法是为本例发明的)。

这使用一个表达式,您可以了解表达式语言语法的更多信息,请参见表达式语法

在表达式中,你可以访问一些变量:

用户
用户对象(或字符串)另一次如果你没有经过认证)。
角色
用户拥有的角色数组。方法间接授予的任何角色都包含在此数组中角色层次结构但是它不包括IS_AUTHENTICATED_ *属性(请参阅下面的函数)。
对象
作为第二个参数传递给的对象(如果有)isGranted ()
令牌
令牌对象。
trust_resolver
AuthenticationTrustResolverInterface,对象:您可能会使用is_ * ()代替下面的函数。

此外,你还可以访问表达式中的一些函数:

is_authenticated ()
返回真正的如果用户通过“记住我”或“完全”身份验证,即如果用户“登录”则返回true。
is_anonymous ()
返回真正的如果用户是匿名的。也就是说,防火墙确认它不知道这个用户的身份。这不同于IS_AUTHENTICATED_ANONYMOUSLY,这是允许的所有用户,包括已认证的用户。
is_remember_me ()
相似,但不等于IS_AUTHENTICATED_REMEMBERED,见下文。
is_fully_authenticated ()
等于检查用户是否有IS_AUTHENTICATED_FULLY的角色。
has_role ()
检查用户是否具有与表达式类似的给定角色角色中的'ROLE_ADMIN'

is_remember_me ()而且is_fully_authenticated ()函数是类似的使用IS_AUTHENTICATED_REMEMBERED而且IS_AUTHENTICATED_FULLYisGranted ()函数-但它们是相同的。区别如下:

1 2 3 4 5 6 7 8 9
使用欧宝娱乐app下载地址组件ExpressionLanguage表达式/ /……authorizationChecker->get (“security.authorization_checker”);access1authorizationChecker->isGranted (“IS_AUTHENTICATED_REMEMBERED”);access2authorizationChecker->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。

此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。