Я использую Voters для управления разрешениями в моем приложении, и все работает нормально для отдельных объектов.
То, что я, кажется, не могу сделать, так это применить Voter к коллекции объектов. Например, у меня есть конечная точка / люди, которые вернут полный список людей, но он должен быть отфильтрован в соответствии с правами каждого пользователя (руководитель отдела должен видеть только людей в своем собственном отделе). Есть ли способ сделать это с избирателями?




Что ж, это можно сделать с помощью средства проверки авторизации:
// your controller
private $authorizationChecker;
public function __construct(AuthorizationCheckerInterface $authorizationChecker)
{
$this->authorizationChecker = $authorizationChecker;
}
// in your action
return array_filter($userCollection, function (User $user) {
return $this->authorizationChecker->isGranted('VOTER_NAME', $user);
});
или просто, если вы контроллеры, расширяете класс Symfony Controller:
return array_filter($userCollection, function (User $user) {
return $this->isGranted('VOTER_NAME', $user);
});
Благодарю вас за ваш ответ, он работает :) Как комментарий, я думаю, что он также работает без необходимости вводить AuthorizationCHeckerInterface, поскольку Symfony, похоже, уже делает это. Итак, для меня вызов $ this-> isGranted ('VOTER_NAME', $ user) отлично работает.
Да, я написал так, потому что мои контроллеры вызываются по протоколу POPO и не расширяют какой-либо класс. Я предпочитаю вводить все самостоятельно.
Спасибо за ваш ответ. Я не уверен, что понимаю, как это будет работать. Моя проблема возникает из-за того, что избиратель всегда возвращает истину или ложь. Мне нужно было бы вернуть массив объектов. Не могли бы вы уточнить решение?