2828use App \Security \ApiTokenAuthenticatedToken ;
2929use Doctrine \ORM \EntityManagerInterface ;
3030use Symfony \Component \Security \Core \Authentication \Token \TokenInterface ;
31+ use Symfony \Component \Security \Core \Authorization \Voter \Vote ;
32+ use Symfony \Component \Security \Core \Authorization \Voter \Voter ;
33+ use Symfony \Contracts \Translation \TranslatorInterface ;
3134
3235/**
3336 * @see \App\Tests\Services\UserSystem\VoterHelperTest
3437 */
3538final class VoterHelper
3639{
3740 private readonly UserRepository $ userRepository ;
41+ private readonly array $ permissionStructure ;
3842
39- public function __construct (private readonly PermissionManager $ permissionManager , private readonly EntityManagerInterface $ entityManager )
43+ public function __construct (private readonly PermissionManager $ permissionManager ,
44+ private readonly TranslatorInterface $ translator ,
45+ private readonly EntityManagerInterface $ entityManager )
4046 {
4147 $ this ->userRepository = $ this ->entityManager ->getRepository (User::class);
48+ $ this ->permissionStructure = $ this ->permissionManager ->getPermissionStructure ();
4249 }
4350
4451 /**
@@ -124,4 +131,17 @@ public function isValidOperation(string $permission, string $operation): bool
124131 {
125132 return $ this ->permissionManager ->isValidOperation ($ permission , $ operation );
126133 }
127- }
134+
135+ public function addReason (?Vote $ voter , string $ permission , $ operation ): void
136+ {
137+ if ($ voter !== null ) {
138+ $ voter ->addReason (sprintf ("User does not have permission %s -> %s -> %s (%s.%s). " ,
139+ $ this ->translator ->trans ('perm.group. ' .$ this ->permissionStructure ['perms ' ][$ permission ]['group ' ] ?? 'default ' ),
140+ $ this ->translator ->trans ($ this ->permissionStructure ['perms ' ][$ permission ]['label ' ] ?? $ permission ),
141+ $ this ->translator ->trans ($ this ->permissionStructure ['perms ' ][$ permission ]['operations ' ][$ operation ]['label ' ] ?? $ operation ),
142+ $ permission ,
143+ $ operation
144+ ));
145+ }
146+ }
147+ }
0 commit comments