2013-04-30 2 views
3

나는 소나타 관리 번들을 사용하고 있는데 나는 기능 몇 가지 문제에 봉착 : 나는 간단하게 작성하는 경우소나타 관리 번들 제거 routeCollection 역할

function configureRoutes(RouteCollection $collection){ } 

기능이 제대로 작동을 :

$collection->remove('create'); 

는하지만 내가 할 triying하고있어 연결된 사용자의 역할에 따라 몇 가지 경로를 제거하는 것입니다, 그래서 시도 :

$seguridad = $this->getConfigurationPool()->getContainer()->get('security.context'); 
if ($seguridad->getToken()->getUser() != "anon."){ 
    if (!$seguridad->isGranted('ROLE_ADMIN') ) { 
     $collection->remove('create'); 
    } 
} 

하지만 Admin으로 로그인하면 오류가 발생합니다 : SonataAdminBundle : Block : block_admin_list.html.twig의 31 행에있는 템플릿 ("Route"admin_sademer_core_MIENTITY_create "존재하지 않음")의 렌더링 중에 예외가 발생했습니다.

마치 소나타가 대시 보드에 들어가기 전에 내가 만드는 경로를 제거한 다음 대시 보드에 입력하면 경로 생성에 들어가려고하지만 경로는 이미 제거됩니다. 하지만 무슨 일이 일어나고 있는지 잘 모르겠습니다.

아이디어가 있으십니까? 고마워요! 경로가 캐시 때문에 아마

+0

http://sonata-project.org/bundles/admin/master/doc/reference/security.html#configuration을 확인하십시오. 실제로이 작업을 수행하는 기본 제공 방법이 있습니다. – likeitlikeit

+0

이 페이지를 보았지만 각 엔티티의 각 사용자/역할에 각 권한을 첨부하는 방법이 명확하지 않습니다. 설명서는 각기 다른 권한을 어떻게 선언 할 수 있는지 보여 주지만 각 엔티티마다 각 권한이있는 권한을 선언하는 방법을 보여주지 않기 때문에 보여줍니다. – Angel

답변

0

,이 시도 :

$seguridad = $this->getConfigurationPool()->getContainer()->get('security.context'); 
if ($seguridad->getToken()->getUser() != "anon."){ 
    if (!$seguridad->isGranted('ROLE_ADMIN') ) { 
     $collection->remove('create'); 
    } else { 
     $collection->add('create'); 
    } 
} 
0

난 그냥 그냥 entitAdmin.php 파일에 isGranted() 오버라이드 (override) 그것을 다른 방식으로,했다. 그런 다음 사용자 역할에 따라 권한을 확인할 수 있습니다. 그러나 그것은 우리의 목적을 달성했습니다. $ collection-> remove ('create')를 사용하려면 응용 프로그램 런타임에서 메서드 ("configureRoutes()")를 호출 할 방법이 없으므로이를 수행 할 수 없습니다. 캐시가 생성되는 동안 만 해당 메소드 ("configureRoutes()")를 호출하십시오.

/** 
* {@inheritdoc} 
*/ 
public function isGranted($name, $object = null) 
{ 
    $user = $this->getConfigurationPool()->getContainer()->get('security.context')->getToken()->getUser(); 

    switch ($name) { 
     case "CREATE": 
      if (!$user->hasRole("ROLE_ADMIN")) { 
       return false; 
      } 
     default: 
      return true; 
    } 
} 
관련 문제