授权

编辑本页

警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 3.4,现已不再维护。

本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。

授权

当任何身份验证提供程序(请参阅身份验证)已经验证了尚未验证的令牌,则将返回一个已验证的令牌。对象中直接设置此令牌TokenStorageInterface使用它的setToken ()方法。

从那时起,对用户进行身份验证,即识别。现在,应用程序的其他部分可以使用令牌来决定用户是否可以请求某个URI或修改某个对象。这个决定将由一个实例做出AccessDecisionManagerInterface

授权决策总是基于以下几点:

  • 当前令牌
    例如,令牌将getRoles ()方法可以用来检索当前用户的角色(例如。ROLE_SUPER_ADMIN),或者决定可能基于令牌的类别。
  • 一组属性
    每个属性代表用户应该拥有的某种权利,例如:ROLE_ADMIN确保用户是管理员。
  • 对象(可选)
    需要检查访问控制的任何对象,如文章或评论对象。

访问决策管理器

由于决定用户是否被授权执行某个操作可能是一个复杂的过程,因此标准AccessDecisionManager它本身取决于多个投票者,并根据它所获得的所有选票(积极、消极或中立)做出最终裁决。它识别了几种策略:

肯定的(默认)
只要有一个选民批准访问,就授予访问权限;
共识
如果允许进入的选民多于拒绝进入的选民,则允许进入;
一致
只有在没有选民拒绝的情况下才允许进入。如果所有选民都投了弃权票,则该决定以投票结果为依据allow_if_all_abstain配置选项(默认为).

可用选项的详细用法:

12 3 4 5 6 7 8 9 10 11 12 13 14 16 17 18 19 20
使用ob娱乐下载组件安全核心授权AccessDecisionManager// Symfony\Compoob娱乐下载nent\Security\Core\Authorization\Voter\VoterInterface的实例选民=[…];// " positive ", "consensus", "unanimous"中的一个策略=……;//当所有选民弃权时,是否允许进入allowIfAllAbstainDecisions=……;//当没有多数意见时是否授予访问权限(只适用于“协商一致”策略)allowIfEqualGrantedDeniedDecisions=……;accessDecisionManagerAccessDecisionManager (选民策略allowIfAllAbstainDecisionsallowIfEqualGrantedDeniedDecisions);

另请参阅

中更改默认策略配置

选民

选民是VoterInterface,这意味着他们必须实现一些方法,允许决策管理器使用它们:

投票(TokenInterface $token, $object,数组$attributes)
的类常量之一,此方法将执行实际投票并返回值VoterInterface,即VoterInterface: ACCESS_GRANTEDVoterInterface: ACCESS_DENIEDVoterInterface: ACCESS_ABSTAIN

Security组件包含了一些标准投票者,涵盖了很多用例:

AuthenticatedVoter

AuthenticatedVoter投票人支持属性IS_AUTHENTICATED_FULLYIS_AUTHENTICATED_REMEMBERED,IS_AUTHENTICATED_ANONYMOUSLY并根据当前认证级别授予访问权限,即用户是完全认证,还是仅基于“记住我”cookie,甚至匿名认证?:

12 3 4 5 6 7 8 9 10 11 12 13 14 15
使用ob娱乐下载组件安全核心身份验证AuthenticationTrustResolver使用ob娱乐下载组件安全核心身份验证令牌AnonymousToken使用ob娱乐下载组件安全核心身份验证令牌RememberMeTokentrustResolverAuthenticationTrustResolver (AnonymousToken::类,RememberMeToken::类);authenticatedVoterAuthenticatedVoter (trustResolver);// Symfony\Compob娱乐下载onent\Security\Core\Authentication\Token\TokenInterface实例令牌=……;//任意对象对象=……;投票authenticatedVoter->投票(令牌对象, (“IS_AUTHENTICATED_FULLY”]);

RoleVoter

RoleVoter支持以具备ROLE_并在至少需要一个时授予用户访问权限具备ROLE_ *属性可以在令牌返回的角色数组中找到将getRoles ()方法:

1 2 3 4 5
使用ob娱乐下载组件安全核心授权选民RoleVoterroleVoterRoleVoter (“具备ROLE_”);roleVoter->投票(令牌对象, (“ROLE_ADMIN”]);

RoleHierarchyVoter

RoleHierarchyVoter扩展RoleVoter并提供了一些额外的功能:它知道如何处理角色的层次结构。例如,aROLE_SUPER_ADMIN角色可以有子角色ROLE_ADMIN而且ROLE_USER,这样当某个对象需要用户拥有时ROLE_ADMIN角色时,它将访问权限授予实际上拥有ROLE_ADMIN角色,也是给用户的ROLE_SUPER_ADMIN角色:

1 2 3 4 5 6 7 8 9 10
使用ob娱乐下载组件安全核心授权选民RoleHierarchyVoter使用ob娱乐下载组件安全核心角色RoleHierarchy层次结构= (“ROLE_SUPER_ADMIN”= > [“ROLE_ADMIN”“ROLE_USER”]];roleHierarchyRoleHierarchy (层次结构);roleHierarchyVoterRoleHierarchyVoter (roleHierarchy);

ExpressionVoter

ExpressionVoter属性所创建的表达式的求值来授予访问权ExpressionLanguage组件.这些表达式可以访问一些特殊安全变量

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
使用ob娱乐下载组件ExpressionLanguage表达式使用ob娱乐下载组件安全核心授权选民ExpressionVoter/ /ob娱乐下载 Symfony核心组件\ \安全\ \ \ ExpressionLanguage授权;expressionLanguage=……;// Symfony\Compob娱乐下载onent\Security\Core\Authentication\AuthenticationTrustResolverInterface实例trustResolver=……;/ /ob娱乐下载 Symfony \ \安全\ \授权\ AuthorizationCheckerInterface核心组件authorizationChecker=……;expressionVoterExpressionVoter (expressionLanguagetrustResolverauthorizationChecker);// Symfony\Compob娱乐下载onent\Security\Core\Authentication\Token\TokenInterface实例令牌=……;//任意对象对象=……;表达式表达式(' '角色中的' ROLE_ADMIN '或(不是is_anonymous()和user.isSuperAdmin())'投票expressionVoter->投票(令牌对象, (表达式]);

请注意

当您创建自己的投票人时,您可以使用它的构造函数注入它做出决定所需的任何依赖项。

角色

角色是表示用户所拥有的某种权利的对象。唯一的要求是它们必须定义一个getRole ()方法,返回角色本身的字符串表示形式。为此,您可以选择扩展默认值角色类,返回该方法中的第一个构造函数参数:

1 2 3 4 5 6
使用ob娱乐下载组件安全核心角色角色角色角色(“ROLE_ADMIN”);//显示'ROLE_ADMIN'var_dump (角色->getRole ());

请注意

大多数身份验证令牌从AbstractToken,这意味着赋予其构造函数的角色将自动从字符串转换为这些简单的角色对象。

使用决策管理器

访问监听器

访问决策管理器可以在请求中的任何位置使用,以决定当前用户是否有权访问给定的资源。基于URL模式限制访问的一种可选但有用的方法是AccessListener,它是防火墙侦听器之一(请参阅防火墙与授权),它会为每个匹配防火墙映射的请求触发(请参见防火墙与授权).

它使用访问映射(应该是的实例)AccessMapInterface),其中包含请求匹配器和当前用户访问应用程序所需的相应属性集:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
使用ob娱乐下载组件HttpFoundationRequestMatcher使用ob娱乐下载组件安全核心身份验证令牌存储TokenStorage使用ob娱乐下载组件安全HttpAccessMap使用ob娱乐下载组件安全Http防火墙AccessListeneraccessMapAccessMap ();tokenStorageTokenStorage ();requestMatcherRequestMatcher (“^ /管理”);accessMap->add (requestMatcher, (“ROLE_ADMIN”]);accessListenerAccessListener (tokenStorageaccessDecisionManageraccessMapauthenticationManager);

授权检查程序

访问决策管理器也可用于应用程序的其他部分isGranted ()方法AuthorizationChecker.调用此方法将直接将问题委托给访问决策管理器:

12 3 4 5 6 7 8 9 10 11 12
使用ob娱乐下载组件安全核心授权AuthorizationChecker使用ob娱乐下载组件安全核心异常AccessDeniedExceptionauthorizationCheckerAuthorizationChecker (tokenStorageauthenticationManageraccessDecisionManager);如果(!authorizationChecker->isGranted (“ROLE_ADMIN”)) {AccessDeniedException ();}
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。