2012-10-22 2 views
8

Symfony2를 사용하고 있으며 사용자와 역할이 이미 내 DB에 저장되어 있습니다.데이터베이스에 Symfony2 "access_control"정보를 저장하는 방법은 무엇입니까?

access_control: 
    - { path: ^/admin, role: ROLE_ADMIN} 
    - { path: ^/users, role: ROLE_MANAGER} 

하지만 데이터베이스에서이 access_control 정보를 저장하고 싶은, 그래서 내 시스템에서 사용자는 관리 인터페이스를 사용하여 권한 자체를 변경할 수 있습니다 : 나는 security.yml 아래 뭔가를 설정하면 잘 작동합니다.

나는 ACL과 FOSUserBundle을 보았지만 이에 대한 해결책을 찾지 못했습니다. if ($user->hasRole($role))과 같은 권한으로 확인할 수 있지만 모든 컨트롤러에서이 작업을 수행해야합니다.

동적 "access_control"기능을 정의 할 수있는 방법이 있습니까? 어쩌면 access_control을 true 또는 false를 반환 할 수있는 일부 클래스로 리디렉션하는 것과 같은 것일 수 있습니다. 어떤 해결책이 있습니까?

답변

5

데이터베이스 저장 역할에 대해 유효성을 검사하려는 작업/서비스에 대해 설정 한 특정 역할 (예 : DB_ROLE_CHECK)을 설정하는 것이 가장 좋은 방법입니다.

그런 다음 DB_ROLE_CHECK에 연결하고 데이터베이스 항목에 대한 요청의 유효성을 검사하는 보안 유권자를 만듭니다.

참조 :

+0

감사합니다. 완벽하게 작동했습니다! –

+0

나는 그것을 얻지 않았다. 역할 계층 구조에 DB_ROLE_CHECK 역할을 배치하고 Voter에서 경로를 확인하는 방법은 무엇입니까? 예를 들어 [경로, 역할]과 같은 DB 항목이 있습니다. 그리고 access_control 규칙 ^/: DB_ROLE_CHECK, 맞습니까? 따라서 모든 요청에 ​​대해 DBVoter를 실행합니다. $ 속성에서 나는 $ token 다음에 역할을 가질 것이다. 그러면 $ subject param이라는 경로 나 경로가 생깁니 까? 그래서 경로를 통해 DB 레코드를 가져와 결정 관리자의 $ 토큰에서 $ user와 (과)의 역할을 사용해야합니다. –

3

액세스지도 here를 구축한다.

access_control이 없으면 아무 것도 수행되지 않습니다.

이제 AccessMapInterface의 구현을 정의하고 security.access_map.class 매개 변수를 클래스로 대체하십시오.

아마도 AccessMap을 빌드하려면 공장이 필요할 것입니다.

+1

나는 그것을하려고하지만, 제발, 어떻게 security.access_map.class 매개 변수를 무시할 수 있습니까? 나는 이것을 security.yml에 넣으려고했다 : security : access_map : class : CRM \ CoreBundle \ Security \ DBAccessMap –

관련 문제