2012-01-19 2 views
12

symfony2 역할 계층 구조를 사용하고 있습니다 만 제대로 작동하지만 약간의 변경 작업을 수행하기 위해 role_hierarchy을 내 security.yml에서 검색해야합니다.symfony에서 전체 역할 계층 구조를 검색하는 방법

role_hierarchy: 
ROLE_USER: [ROLE_ACCESS_USER, ROLE_ACCESS_DATA, ROLE_ACCESS_PRODUCT] 

내가 어떻게 ROLE_USERROLE_ACCESS_USER, ROLE_ACCESS_DATA, ROLE_ACCESS_PRODUCT로 만든 것을 내 코드에서 알 수있는, 단지 ROLE_USER을 반환 getRoles()를 사용하십니까?

도움 주셔서 감사합니다.

+0

당신은 무엇을해야합니까 :


당신이 다음 줄을 추가하여 config/services.ymlsecurity.role_hierarchy의 별명을 추가해야 Symfony4 기준으로

? –

+0

내 "사용자"(ROLE_USER)는 기본 역할 세트를 가지고 있으므로 관리자에게 구체적인 역할 (예 : ROLE_ACCESS_DATA) 만 제공하도록 허용하려고합니다. 모든 기존 역할을 보여주는 인터페이스를 통해이를 수행하려고합니다. – linibou

답변

34

당신은 컨테이너에서 계층 구조를 얻을 수 있습니다 :

$container->getParameter('security.role_hierarchy.roles') 
+0

완벽한 감사합니다 :-) – linibou

0

당신의 역할의 올바른 표현의 경우, 재귀가 필요합니다. 역할은 다른 역할을 확장 할 수 있습니다. 자동 배선이 활성화 https://stackoverflow.com/a/36900807/3635680

+0

답안의 관련 텍스트를 인용하십시오. 연결 만 응답을 게시하는 것은 권장되지 않습니다 (링크가 스택 오버플로로 연결되는 경우에도). –

0

, 당신이 직접 글로벌 역할 계층 가득 RoleHierarchy 객체를 삽입 할 수 있습니다 여기에

은 예입니다. 간단히 의존성 주입을 사용하여 컨트롤러 또는 서비스의 RoleHierarchyInterface를 주입 :

use Symfony\Component\Security\Core\Role\RoleHierarchyInterface; 

// ... 
public function __construct(RoleHierarchyInterface $roleHierarchy) 
{ 
    $this->roleHierarchy = $roleHierarchy; 
} 

참고 :이 또한 당신의 경우에 유용 할 수있는 RoleHierarchy 객체에 getReachableRoles()를 호출 할 수 있습니다.

services: 
    # creating alias for RoleHierarchyInterface 
    Symfony\Component\Security\Core\Role\RoleHierarchyInterface: '@security.role_hierarchy' 
관련 문제