2012-10-10 3 views
2

Symfony 2.1에서 전역 권한으로 작동해야하는 권한 목록 (기본 제공 권한 맵이 있어야 함)을 구현하는 방법이 필요합니다. 내가해야 할 일은 그룹이나 사용자가 볼 수있는보기를 제한하는 것입니다. 예를 들어, 두 개의 컨트롤러 (controllerA와 controllerB)와 두 명의 사용자 (userA와 userB)가 있습니다. 첫 번째 사용자는 controllerA가 관리하는보기를 볼 수 있어야하지만 컨트롤러 B의보기를 볼 수 없어야합니다. 대신 userB는 두 컨트롤러를 모두 볼 수 있어야합니다. Symfony의 책/요리 책에서 ACL에 대한 튜토리얼을 발견했으나 엔티티에 적용된 사용 권한에 대해서만 이야기하는 것 같습니다. 대신 컨트롤러는 엔티티가 아닙니다. 어떠한 제안?컨트롤러의 Symfony 2보기 액세스

업데이트 1 ObjectIdentity 인터페이스는 객체가 아닌 ID로도 만들 수 있다는 것을 알게되었습니다. 내가 가진,

$aclProvider = $this->get('security.acl.provider'); 
$objectIdentity = ObjectIdentity::fromDomainObject($this); 
$acl = $aclProvider->createAcl($objectIdentity); 

$securityContext = $this->get('security.context'); 
$user = $securityContext->getToken()->getUser(); 
$securityIdentity = UserSecurityIdentity::fromAccount($user); 

$builder = new MaskBuilder(); 
$builder->add('MY_PERMISSION'); 
$mask = $builder->get(); 

$acl->insertObjectAce($securityIdentity, $mask); 
$aclProvider->updateAcl($acl); 

이 작동하는 것 같다 다음 ACL 항목 데이터베이스에 삽입 할

class MyController extends Controller 
{ 
    public function getId() 
    { 
     return 'my_controller'; 
    } 

    public function indexAction() 
    { 
     if ($this->get('security.context')->isGranted('MY_PERMISSION', $this) === false) 
     { 
      throw new AccessDeniedException(); 
     } 

     ... 
    } 
} 

을 다음과 같은 코드를 사용 : 이것은 내가 사용하여 전체 컨트롤러의 클래스에 대한 권한을 확인 할 수 있음을 의미 두 명의 사용자. 처음에는 컨트롤러의 클래스를 위의 코드로 볼 수있는 권한을 부여했으나 작동하지 않고 대신 사용 권한이 설정되지 않은 두 번째 사용자가 거부 된 액세스 예외를받습니다. 그러나 여전히 단일 컨트롤러의 작업에 사용 권한을 부여하는 방법을 알아야합니다. 분명한 해결책은 각 경로 항목에 대해 컨트롤러 클래스를 사용하는 것이지만 이는 합리적이지 않습니다.

답변

1

요청한 패턴에 대한 일반적인 패턴이 없습니다. symfony2 보안http://symfony.com/doc/current/book/security.html

작업에 대한 액세스 권한을 부여하기 전에 사용자 역할이나 그룹을 확인 하시겠습니까?

if (false === $this->get('security.context')->isGranted('ROLE_ADMIN')) { 
     throw new AccessDeniedException(); 
} 

예외로 인해 일부 사용자 정의 오류 페이지가 렌더링 될 수 있습니다.

무엇에 대해 :

access_control: 
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/, role: ROLE_USER } 

내가 그들 중 많은, 각 컨트롤러 액션 하나가 있어야 역할을 확인했다 경우 security.yml

+0

인치 대신 VIEW_CONTROLLER와 같은 일종의 권한을 가지고 모든 컨트롤러에 적용 할 수 있습니다. 내가 joomla 권한을 어디 사용자/그룹 관리 패널의 볼 수있는 정의 할 수 있습니다. – Stefano

+0

내 편집을 참조하십시오 내가 원하는 것 같아 –

+0

isGranted 부분을 작성하는 유일한 방법이어야합니다. 나는 항상 역할을 확인한다. 내가 이해할 수없는 것은 특정 컨트롤러에 대해 사용자에게 역할을 부여하는 방법입니다. 내가 제대로 작동하는지 이해한다면 컨트롤러는 도메인 객체 여야하지만 데이터베이스에 저장된 것이 아닙니다. – Stefano

관련 문제