Всем привет.
Доступ к страницам в целом определен через security.yaml:
access_control:
- { path: ^/cp/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/cp/register, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/cp/forgot-password, roles: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/console, roles: IS_AUTHENTICATED_FULLY }
Таким образом, доступ ко всем роутам /console есть только у авторизованных пользователей.
Но есть роут /console/{item<[1-9]\d*>}, где доступ должен быть только у владельца записи в базе. У этих записей есть колонка user_id, где определяется владелец через связь many-to-one.
Вот сам метод контроллера:
/**
* @Route("/{item<[1-9]\d*>}", name="console_item")
*/
public function actionConsoleItem(Console $console)
{
return $this->render('console/console_item.html.twig', [
'console' => $console,
]);
}
Таким образом через ParamConverter берется запись из базы по параметру item, но как проверить соответствует ли значение из user объекту $this-getUser()?
Может есть какая-то возможность для класса контроллера в целом указать метод определения наличия доступа?
В этом же контроллере у меня есть метод, где я вывожу все итемы пользователя по условию ['user' => $this->getUser()]
В Entity:
/**
* @ORM\ManyToOne(targetEntity="App\Entity\User", inversedBy="id")
*/
private $user;
...
public function getUser(): User
{
return $this->user;
}
public function setUser(User $user): self
{
$this->user = $user;
return $this;
}