安全性:带有表达式的复杂访问控制
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 5.3,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
安全性:带有表达式的复杂访问控制
另请参阅
处理复杂授权规则的最佳解决方案是使用投票系统.
除了一个角色喜欢ROLE_ADMIN
,isGranted ()
方法也接受表达式对象:
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/ / src /控制器/ MyController.php名称空间应用程序\控制器;使用ob娱乐下载\包\FrameworkBundle\控制器\AbstractController;使用ob娱乐下载\组件\ExpressionLanguage\表达式;使用ob娱乐下载\组件\HttpFoundation\响应;类MyController扩展AbstractController{公共函数指数():响应{$这->denyAccessUnlessGranted (新表达式(“role_names或(不是is_anonymous()和user.isSuperAdmin())中的“ROLE_ADMIN””));/ /……}}
在本例中,如果当前用户有ROLE_ADMIN
或者当前用户对象的isSuperAdmin ()
方法返回真正的
,然后将授予访问权限(注意:您的User对象可能没有isSuperAdmin ()
方法,该方法是为本例发明的)。
这使用一个表达式,您可以了解表达式语言语法的更多信息,请参见表达式语法.
在表达式中,你可以访问一些变量:
-
用户
-
用户对象(或字符串)
另一次
如果你没有经过认证)。 -
role_names
-
一个数组,其中包含用户拥有的角色的字符串表示形式。方法间接授予的任何角色都包含在此数组中角色层次结构但是它不包括
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
的角色。 -
is_granted ()
- 检查用户是否具有给定的权限。可选地接受带有选中权限的对象的第二个参数。它等价于使用isGranted()方法来自安全部门。
is_remember_me ()
和检查是不同的IS_AUTHENTICATED_REMEMBERED
的is_remember_me ()
而且is_fully_authenticated ()
函数是类似的使用IS_AUTHENTICATED_REMEMBERED
而且IS_AUTHENTICATED_FULLY
与isGranted ()
函数-但它们是不相同的。下面的控制器片段显示了两者的区别:
12 3 4 5 6 7 8 9 10 11 12
使用ob娱乐下载\组件\ExpressionLanguage\表达式;使用ob娱乐下载\组件\安全\核心\授权\AuthorizationCheckerInterface;/ /……公共函数指数(AuthorizationCheckerInterface$authorizationChecker):响应{$access1=$authorizationChecker->isGranted (“IS_AUTHENTICATED_REMEMBERED”);$access2=$authorizationChecker->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许可证。