설명서와 마찬가지로 복제 작업을 구현했습니다. 개체를 만든 사용자에게 복제 작업에 대한 액세스를 제한하려면 어떻게합니까?사용자에 따라 사용자 지정 작업을 액세스 할 수 없도록 만드는 방법 - Sonata Admin
내 작업에서 이미 액세스 거부 예외 검사를 받았지만 사용자가 해당 개체의 작성자가 아닌 경우 목록보기에서 단추를 숨길 수는 있습니다. 사용자는 여전히 주문을 나열하고 표시 할 수 있어야합니다. 당신이 내 복제 작업에서 볼 수 있듯이 나는,
public function cloneAction($id = null)
{
$object = $this->admin->getSubject();
if (!$object) {
throw new NotFoundHttpException(sprintf('Unable to find the object with id : %s', $id));
}
If (!$object->isAuthor($this->getUser())) {
throw new AccessDeniedException();
}
$clonedObject = clone $object;
$this->admin->create($clonedObject);
$this->addFlash('sonata_flash_success', 'Cloned successfully');
return new RedirectResponse($this->admin->generateUrl('edit', array('id' => $clonedObject->getId())));
}
:
protected function configureRoutes(RouteCollection $collection)
{
$collection->add('clone', $this->getRouterIdParameter().'/clone');
}
그리고 내 목록 필드 :
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->add('_action', 'actions', array(
'actions' => array(
'show' => array(),
'edit' => array(),
'clone' => array(
'template' => 'AppBundle:Sonata/Button:clone_button.html.twig'
),
), 'label' => 'Actions'
))
;
}
내 복제 작업을
이
내 경로입니다 사용자가 주문의 저자인지 확인하십시오. 하지만 어떻게 내isAuthor
기능을 확인하여 목록의 버튼을 완전히 제거 할 수 있습니까?
이제 사용자는 버튼을 볼 수 있기 때문에 버튼을 클릭하면 주문을 복제 할 권한이 없으며 버튼을 클릭하면 액세스가 거부 된 예외가 발생합니다. 그래서 버튼을 전혀 보여주고 싶지 않습니다. 편집 단추에 대해 동일한 개수입니다.
protected function configureRoutes(RouteCollection $collection)
{
$user = $this->getConfigurationPool()->getContainer()->get('security.token_storage')
->getToken()->getUser();
If (!$object->isAuthor($user)) {
$collection->remove('edit');
$collection->remove('clone');
}
}
을하지만, 분명히이 수행 할 수 없습니다
나는 이런 식의 생각.
아무도 아이디어를 가지고 있지 않습니까?
좋아, 그게 내가 실제로해야 할 일을하게 만들거야. 하지만 이제는 문제가 남아 있습니다. 사용자가 액세스 권한이없는 경우 어떻게 경로를 숨길 수 있습니까? 버튼은 거기에 남아있을 것이고 누군가 클릭하면 예외가 던져 질 것입니다. 사용자가 사용할 수있는 경우에만 단추가 표시되기를 원합니다. 순수한 Symfony로 작업하면 그렇게하는 것이 쉽습니다. 하지만 이제는 소나타를 사용합니다. –
템플릿을 확인하십시오.하지만 말했듯이 이미 체크가되어있을 것입니다. 아니면 직접 템플릿을 작성 했습니까? 'is_granted()'를 경로와 객체와 함께 사용해야하며 유권자를 호출 할 것입니다. – greg0ire
그래서 이것을 해결하고 싶으면 0 번 단계를 찾아서 버튼을위한 템플릿을 보여주세요. – greg0ire