2015-01-08 2 views
0

SecurityVoter에 대한 질문입니다.오브젝트 대신 클래스를 기반으로하는 SecurityVoter

심포니 2.6을 사용하면 사용자가 개체에 대한 구체적인 권한이 있는지 확인하는 간단한 보안 유권자를 만들 수 있습니다 작동

protected function isGranted($attribute, $object, $user = null) 
{ 
    switch ($attribute) { 
     case self::VIEW: 
      return $object->getAuthor() === $user; 
     case self::EDIT: 
      return $object->getAuthor() === $user && time() - $object->getAddedAt()->getTimestamp() <= TicketMessage::PERMIT_EDIT_GAP; 
     default: 
      return false; 
    } 
} 

합니다. 하지만 객체 대신 클래스를 기반으로 속성을 검사하려면 어떻게해야합니까? 예를 들어, 현재 존재하지 않는 새 오브젝트를 작성하기위한 '작성'권한.

코드 샘플 :

is_granted('create', 'AppBundle\Entity\MyEntity') 

나 :

is_granted('create', 'AppBundle:Entity') 

그렇게 할 수있는 방법이 있나요?

감사합니다.

+0

유권자의 행동 방식을 잘 모르겠다 - 권한을 확인하기 위해 뭔가가 필요합니다. 최악의 경우 값없이 객체의 새 버전을 인스턴스화하여 사용할 수 있습니까? –

+0

이 예를 빈 객체 인스턴스와 연결하기 시작했습니다. 하지만 나뭇 가지에이 뚜껑도 확인해야합니다. 템플릿에이 객체가 없습니다 ... – Soullivaneuh

+0

사용자가 수업에서 할 수있는 것에 대한 정보는 어디서 가지고 있습니까? – Hpatoio

답변

-1

Symfony의 개념을 더 잘 이해하려면 Symfony Best PracticlesSymfony Voters에 대한 설명서를 읽어보십시오. 클래스 속성에만 기반한 권한을 확인해야하는 경우 결정은 상수입니다. 따라서 응용 프로그램의 로직을 제어하기 위해 권장되는 방법은 Symfony Best Practicles에 설명되어 있습니다 :

모범 사례 : 변경 드물게 구성 옵션을 정의하는 상수를 사용합니다.

당신이 볼 수 있듯이, 당신이 원하는 일을 두 가지 권장 방법이 있습니다 :에 대한

  • 사용 parameters.yml (당신의 정의 YourBundle\SecurityManager에서 당신은 몇 가지 상수를 정의 할 수 있습니다 예를 들어)

    • 사용 상수 구성
  • +0

    보안 베스트 프랙티스를 알고 있지만 사용 사례에 도움이되는 방법을 실제로 볼 수는 없습니다 ... 제안 사항에 대한 예를 제공 할 수 있습니까? 감사. – Soullivaneuh

    +0

    이것은 작성 경로가 액세스 가능해야하는지 여부에 대한 투표를 시도하는 문제를 해결하지 않습니다. – NDM

    관련 문제