Tak jak napisałeś, powinieneś użyć Voters.
Przed akcja w kontrolerze dodaj:
@Security("is_granted('dashboard', user)", message="Access denied")
Implementujesz metody abstrakcyjne po klasie Voters:
// Klasa dziedzicząca metody abstrakcyjne po Voters
private const DASHBOARD= 'dashboard'';
protected function supports($attribute, $subject): bool
{
if (!in_array($attribute, [self::SHOW, self::DASHBOARD])) {
return false;
}
if (!$subject instanceof User) {
return false;
}
return true;
}
protected function voteOnAttribute($attribute, $subject, TokenInterface $token): bool
{
}
switch ($attribute) {
case self::EDIT:
return $this->dashboardForUser($subject, $token);
}
return false;
}
// Funcja pomocnicza, sprawdzająca czy dany user jest właścicielem zasobów
private dashboardForUser($subject, TokenInterface $token): bool
{
$authenticatedUser = $token->getUser();
if (!$authenticatedUser instanceof User) {
return false;
}
/**
* @var User $subject
*/
return $authenticatedUser->getId() === $subject->getId();
}