<?php
/**
* User: bruno.ziegler
* Date: 26.08.16 09:30.
*/
namespace App\Security;
use App\Entity\Sysuser\Sysuser;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use Symfony\Component\Security\Core\User\UserInterface;
class ModuleVoter extends Voter
{
private string $prefix = 'MODULE_';
/**
* Determines if the attribute and subject are supported by this voter.
*
* @param string $attribute An attribute
* @param mixed $subject The subject to secure, e.g. an object the user wants to access or any other PHP type
*
* @return bool True if the attribute and subject are supported, false otherwise
*/
#[\Override]
protected function supports(string $attribute, $subject): bool
{
return str_starts_with($attribute, $this->prefix);
}
/**
* Perform a single access check operation on a given attribute, subject and token.
*/
#[\Override]
protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool
{
/**
* @var Sysuser $user;
*/
$user = $token->getUser();
// Check, ob gültiges User Objekt (kein Anonymous oder so)
if (!$user instanceof UserInterface) {
return false;
}
// Admin Zugriff auf alle MODULE erlauben
if (in_array($user->getRole(), ['ROLE_ADMIN', 'ROLE_SYSADMIN'])) {
return true;
}
// Ende
// Modulberechtigungen checken (die MODULE_xyz sind ebenfalls in den ::getRoles() enthalten)
// Ende
return in_array($attribute, $user->getRoles());
}
}