【发布时间】:2022-01-22 03:27:55
【问题描述】:
我想在我的控制器中控制相同用户对某些方法的访问。 目前,我使用这个:
$this->denyAccessUnlessGranted('ACCESS', $this->Player($toolRepository));
但是我不得不使用这一行并将 ToolRepository 注入到每个方法中......
最简单的方法是什么? 我看到有 IsGranted 注释,但我的主题需要是一个教义对象才能通过我的投票来控制访问。
/**
* @Route("/player")
*/
class PlayerController extends AbstractController
{
/**
* @Route("/", name="player")
* @throws Exception
*/
public function Player(ToolRepository $toolRepository): \App\Entity\Tool
{
$playerTool = 'TestTool2';
$tool = $toolRepository->findOneBy(array('libelle' => $playerTool));
if (!$tool) {
throw new Exception('Tool : ' . $playerTool . 'not found!');
}
return $tool;
}
/**
* @Route("/main", name="player")
* @IsGranted ("ACCESS", subject="tool")
* @throws Exception
*/
public function mainPlayer(PlayerRepository $playerRepository, ToolRepository $toolRepository): Response
{
$this->denyAccessUnlessGranted('ACCESS', $this->Player($toolRepository));
$players = $playerRepository->findAll();
return $this->render('player/player_mainpage.html.twig', ['players'=>$players]);
}
}
【问题讨论】: