在安全访问控制中使用表达式

编辑该页面

在安全访问控制中使用表达式

另请参阅

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

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

1 2 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_ADMIN”role_names或(is_authenticated()和user.isSuperAdmin ())”));/ /……}}

在这个例子中,如果当前用户ROLE_ADMIN如果当前用户对象的isSuperAdmin ()方法返回真正的,然后将被授予访问(注:可能没有一个用户对象isSuperAdmin ()方法,该方法发明这个例子)。

它使用一个表达式,您可以了解更多关于表达式语言语法,看表达式语法

内的表达,你可以访问大量的变量:

用户
的一个实例用户界面当前用户或代表如果你不进行身份验证。
role_names
数组与字符串表示的用户角色。这个数组包含任何角色授予间接地通过角色层次结构但是它不包括IS_AUTHENTICATED_ *属性(请参阅下面的函数)。
对象
的对象(如果有的话)作为第二个参数传递isGranted ()
主题
它存储相同的值对象,所以他们是等价的。
令牌
令牌对象。
trust_resolver
AuthenticationTrustResolverInterface对象:你可能会使用is_ * ()下面的函数来代替。

此外,您可以访问内有一定数量的函数表达式:

is_authenticated ()
返回真正的如果用户通过“记住我”或验证身份验证“充分”,即返回true,如果用户是“登录”。
is_remember_me ()
相似,但不等于IS_AUTHENTICATED_REMEMBERED,见下文。
is_fully_authenticated ()
如果用户已经等于检查IS_AUTHENTICATED_FULLY的角色。
is_granted ()
检查用户是否允许。有选择地接受第二个参数与对象权限检查。它相当于使用isGranted()方法从安全服务。

is_remember_me ()is_fully_authenticated ()函数是类似的使用IS_AUTHENTICATED_REMEMBEREDIS_AUTHENTICATED_FULLYisGranted ()功能——但它们相同的。下面的控制器代码片段显示了不同:

1 2 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()或is_fully_authenticated ()”));}

在这里,access1美元access2美元将相同的值。不同的行为IS_AUTHENTICATED_REMEMBEREDIS_AUTHENTICATED_FULLY,is_remember_me ()函数只有返回true,如果通过一个记得我的饼干和用户身份验证is_fully_authenticated ()只有返回true,如果用户已经登录在这个会话(即是成熟的)。

这项工作,包括代码示例,许可下Creative Commons冲锋队3.0许可证。
ob娱乐下载Symfony 6.0支持通过SensioLabs