2014-09-19 4 views
0

Silex 프레임 워크가있는 유권자 시스템 (Symfony 구성 요소 기반)을 웹 포털에서 개발해야합니다.유권자에게 우선 개념이 있습니까?

이러한 다양한 유권자는 현재 사용자가 좋은 나라에 있는지, 어떤 프로그램에 가입하는지, 사이트에서 광고를 활성화하면 ... 유엔 타임즈 규칙과 함께 사용합니다.

그러나 저는 또한 역할 시스템을 사용하고 싶습니다. 그리고 저는이 역할 유권자가 나머지 부분보다 우선 순위를 우선시해야한다고 생각합니다.

즉 유권자 역할을하지 않으면 유권자가 합의 결정으로 결정할 수 있으며 다른 경우에는 내가 얻고 자하는 합의의 역할입니다.

Symfony에서 제공하는 도구가 있습니까? 나는 긍정 판단과 Unanime 결정 관리와 함께 이미 매트릭스로 이러한 상황을 시뮬레이션하지만, 나는 다른 사람들보다 역할 유권자를 더 중요하게 만드는 방법을 찾지 못했습니다.

답변

1

은 실제로 당신이 그것을 수행하기 위해 자신의 AccessDecisionManager를 작성해야 :

내가 필요 내 경우

다른 투표 덮어 RoleHierarchyVoter, excepts이 경우 기권하다. 그것은 내가 만장일치 전략을 사용 기권 경우

class AccessDecisionManager implements AccessDecisionManagerInterface { 

    private $voters; 

    public function __construct(array $voters) { 
     $this->voters = $voters; 
    } 

    public function decide(TokenInterface $token, array $attributes, $object = null) { 
     $deny = 0; 

     foreach ($this->voters as $voter) { 
      $result = $voter->vote($token, $object, $attributes); 
      if ($voter instanceof RoleHierarchyVoter) { 
       if ($result === VoterInterface::ACCESS_GRANTED) 
        return true; 
       elseif ($result === VoterInterface::ACCESS_DENIED) 
        return false; 
       else 
        continue; 
      }else { 
       if ($result === VoterInterface::ACCESS_DENIED) 
        $deny++; 
      } 
     } 

     if ($deny > 0) 
      return false; 
     else 
      return true; 
    } 
} 

내 사용자 지정하는 AccessDecisionManager를 등록하려면 :

$app['security.access_manager'] = $app->share(function (Application $app) { 
    return new AccessDecisionManager($app['security.voters']); 
}); 
1

당신은 당신의 유권자에 대한 우선 순위를 설정할 수 있습니다 :

your_voter: 
    class: # ... 
    public: false 
    arguments: 
     # ... 
    tags: 
     - { name: security.voter , priority: 255 } 
+0

당신이 문서에이 기능에 대한 링크를해야합니까? – Fractaliste

+1

@Fractaliste https://github.com/symfony/symfony/blob/master/src/Symfony/Bundle/SecurityBundle/Resources/config/security.xml#L110 – sergekv

관련 문제