Bonjour,
Je vais un backend en Symfony 5.2 avec Api Platform. J'ai créé un voter pour autoriser sur condition les utilisateurs à effectuer les opérations qui correspondent à leurs permissions sur l'entité Business. Hier tout marchait bien. Quand dans le voter je fais dd($attribute) ou dd($subject), j'ai le résultat correspondant. Aujourd'hui je ne comprends pas ce qui s'est passé et mes voters ne marchent plus. $subject renvoie maintenant null. Voici mes codes:
// Business.php
<?php
/**
* @ApiResource(
* collectionOperations={
* "post"={
* "denormalization_context"={
* "groups"={"post-business"}
* },
* "security"="is_granted('ROLE_CREATE_REALESTATE_BUSINESS', object)"
* }
* }
* )
*/
class Business
{
/**
* @ORM\Id()
* @ORM\GeneratedValue()
* @ORM\Column(type="integer")
* @Groups({"get-business"})
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
* @Groups({"get-business"})
*/
private $name;
// .....
}
BusinessVoter.php
<?php
namespace App\Security\Voter;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\Security;
use App\Repository\BusinessAdminRepository;
class BusinessVoter extends Voter
{
private $security;
private $adminRepository;
public function __construct(Security $security, BusinessAdminRepository $adminRepository)
{
$this->security = $security;
$this->adminRepository = $adminRepository;
}
protected function supports($attribute, $subject)
{
dd($subject);
return in_array($attribute, [
"ROLE_CREATE_REALESTATE_BUSINESS",
// ...
])
&& $subject instanceof \App\Entity\Business;
}
protected function voteOnAttribute($attribute, $subject, TokenInterface $token)
{
// dd($subject);
$user = $token->getUser();
// if the user is anonymous, do not grant access
if (!$user instanceof UserInterface) {
return false;
}
// ... (check conditions and return true to grant permission) ...
switch ($attribute) {
case 'ROLE_CREATE_REALESTATE_BUSINESS':
if($this->security->isGranted(strtoupper($subject->getBusinessType()->getMinimumRole())))
{
return true;
}
return false;
break;
// ...
}
return false;
}
}
Je remercie d'avance pour vos coups de pousse pour résoudre ce problème.