授权

编辑本页

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

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

授权

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

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

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

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

访问决策管理器

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

肯定的(默认)
只要有一个选民批准访问,就授予访问权限;
共识
如果允许进入的选民多于拒绝进入的选民,则允许进入;
一致
只有在没有选民拒绝访问时才允许访问;
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 16 17 18
使用ob娱乐下载组件安全核心身份验证AuthenticationTrustResolver使用ob娱乐下载组件安全核心身份验证令牌AnonymousToken使用ob娱乐下载组件安全核心身份验证令牌RememberMeTokenanonymousClass= AnonymousToken::类;rememberMeClass= RememberMeToken::类;trustResolverAuthenticationTrustResolver (anonymousClassrememberMeClass);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);

请注意

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

角色

角色是表示用户所拥有的某种权利的对象。唯一的要求是它们的实现RoleInterface,这意味着他们也应该有一个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
使用ob娱乐下载组件安全HttpAccessMap使用ob娱乐下载组件HttpFoundationRequestMatcher使用ob娱乐下载组件安全Http防火墙AccessListeneraccessMapAccessMap ();requestMatcherRequestMatcher (“^ /管理”);accessMap->add (requestMatcher数组“ROLE_ADMIN”));accessListenerAccessListener (securityContextaccessDecisionManageraccessMapauthenticationManager);

授权检查程序

访问决策管理器也可用于应用程序的其他部分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许可证。