2013-02-18 3 views
0

사용자 연결을 허용하는 사용자 지정 사용자 공급자 엔터티가 있습니다. 이 사용자 지정 사용자 공급자 엔터티는이 인터페이스에 따라 UserInterface를 구현합니다. 사용자의 역할을 제공하는 "getRoles()"함수가 있습니다.사용자 지정 사용자 공급자 엔터티를 사용하는 재귀 역할

하지만 내 역할은 재귀 적입니다. 예 : 사용자에게 role1이 있고 role1이 role2를 상속하므로 사용자가 role1과 role2를 얻었습니다. 이 재귀를 만들기 위해 역할 테이블, 역할 _ 롤 테이블 (상위/하위), 사용자 테이블 및 마지막으로 user_role 테이블을 만듭니다.

모든 사용자의 역할을 얻으려면 Doctrine을 사용하여 내 DB에 쿼리해야합니다. 어디에서 그렇게 할 수 있습니까? 엔티티의 "getRoles()"를 덮어 쓸 수 없으며 저장소 양식에 액세스하는 것이 좋지 않은 것 같습니다. 엔티티에서 쿼리하는 것이 금지 된 것처럼 보입니다. 엔티티 저장소의 classe에 쿼리를 넣을 수 없습니다. 엔티티.

P.-S .: 문법에 대한 귀하의 관대함에 감사드립니다. 영어로 된 첫 번째 메시지입니다 (프랑스어).

답변

0

해결책은 교리의 ORM을 완전히 사용하는 것입니다. 올바른 RoleUser와 사용자를 바인딩 할 수 있도록 ORM을 추가

@ORM\OneToMany(targetEntity="RoleUser", mappedBy="user") 
... 
protected $roleUser; 

RoleUser 개체에서 :

는 ORM과 함께 모든 UserRole 그 링크 참조하는 사용자 엔티티의 컬렉션 변수를 추가
@ORM\ManyToOne(targetEntity="User", inversedBy="roleUser") 
... 
protected $user; 

이제 사용자에게 연결된 모든 UserRoles를 가져올 수 있습니다. 역할을 얻으려면 UserRole 엔터티와 역할 사이 및 RoleRole과 역할 간의 "sames"ORM을 작성하십시오. 마지막으로 $ rolesUtilisateur가 User로부터 자신의 역할에 액세스합니다.

0

Symfony 2.x에서는 DB에 역할 계층 구조가 없습니다. 그것은 security.yml에서 구성되어 http://symfony.com/doc/current/book/security.html#hierarchical-roles을 체크 아웃합니다.

이 기능을 Symfony 2에서 직접 사용하지 않으려면 DB에서 직접 역할 계층을 가져 오는 RoleVoter를 직접 구현해야합니다.

또 다른 가능성은 Doctrine Events Listeners (http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/events.html)를 사용하여 DB에서 계층 구조를로드하는 것입니다. 아마도 postLoad 이벤트를 청취해야 할 것입니다.

+0

도움이되는 답변에 감사드립니다. RoleVoter의 설명서를 얻으려는 다른 사람들에게 : [check out] (http://symfony.com/doc/current/components/security/authorization.html#rolevoter) –

관련 문제