Как открыть свойство, которое зависит от группы сериализации из API-платформы, чтобы реагировать-администратор?

я использую Динамическое изменение контекста сериализации в моем заявлении, чтобы применить admin:write группа, когда пользователь является администратором. Так что пользователь на админ сможет обновить это свойство.

Конструктор контекста имеет такую ​​конфигурацию:

<?php

namespace App\Serializer;

use ApiPlatform\Core\Serializer\SerializerContextBuilderInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;

final class AdminContextBuilder implements SerializerContextBuilderInterface
{
private $decorated;
private $authorizationChecker;

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

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

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

return $context;
}
}

Я хочу показать это свойство администратору:

abstract class User implements UserInterface
{
/**
* @ORM\Column(name="account_status", type="string", length=8)
* @Groups({"read", "admin:write"})
*/
protected $accountStatus;
}

Данные возвращаются успешно, и я вижу строку в табличном представлении или представлении элемента в администраторе.

Но документация, сгенерированная API-платформой на …/api/docs.jsonld не раскрывает это свойство: свойство не доступно для записи:

{
"@type": "hydra:SupportedProperty",
"hydra:property": {
"@id": "#User/accountStatus",
"@type": "rdf:Property",
"rdfs:label": "accountStatus",
"domain": "#User",
"range": "xmls:string"},
"hydra:title": "accountStatus",
"hydra:required": false,
"hydra:readable": true,
"hydra:writable": false
},

Я думаю, что это мешает показывать поле в администрации.

Как я могу добавить это свойство в документацию и, в конечном счете, чтобы реагировать на администратора?

Я попробовал любую конфигурацию, о которой мог подумать:

abstract class User implements UserInterface
{
/**
* @ORM\Column(name="account_status", type="string", length=8)
* @Groups({"read", "admin:write"})
* @ApiProperty(writable=true)
*/
protected $accountStatus;
}

7

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]