Как сравнить зарегистрированную связанную с пользователем ассоциацию с другими пользователями внутри построителя контекста - PullRequest
0 голосов
/ 04 мая 2020

я сначала добавлю код, затем объясню, что я хочу от кода

namespace App\Serializer;


use ApiPlatform\Core\Serializer\SerializerContextBuilderInterface;
use App\Entity\User;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;

class UserCollectorContextBuilder implements SerializerContextBuilderInterface
{

    private SerializerContextBuilderInterface $decorated;
    private AuthorizationCheckerInterface $authorizationChecker;
    private TokenStorageInterface $token;


    public function __construct(
        SerializerContextBuilderInterface $decorated,
        AuthorizationCheckerInterface $authorizationChecker,
        TokenStorageInterface $token
    )
    {
        $this->decorated = $decorated;
        $this->authorizationChecker = $authorizationChecker;
        $this->token = $token;
    }

    public function createFromRequest(Request $request, bool $normalization, array $extractedAttributes = null): array
    {
        $context = $this->decorated->createFromRequest($request, $normalization, $extractedAttributes);
        $resourceClass = $context['resource_class'] ?? null;

        if (
            $resourceClass === User::class &&
            isset($context['groups']) &&
            $this->authorizationChecker->isGranted('ROLE_ADMIN') &&
            $normalization === true
        ){
            $context['groups'][] = 'admin:read';

        }

        return $context;
    }
}

Свойства объекта пользователя

/**
  * @ORM\Column(type="boolean")
  * @Groups("admin:read")
  */
private bool $enabled = false;
/**
  * @ORM\ManyToOne(targetEntity="App\Entity\Association", inversedBy="users", cascade={"persist", "remove"})
  * @Groups({"user:read"})
  */
private ?Association $association = null;

, поэтому приведенный выше код работает, он показывает включенное значение для Администратор, но я хочу, чтобы администратор видел только включенное значение пользователей из той же группы (ассоциации), что и администратор, а не из другой группы, потому что каждая группа (ассоциация) имеет своего администратора.

Я был бы рад, если кто-то может помочь как этого добиться.

Спасибо

1 Ответ

0 голосов
/ 12 мая 2020

Я достиг того, что хотел с помощью обычного нормализатора, спасибо. потому что у нас не может быть объекта внутри конструктора контекста

введите описание ссылки здесь

...