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

Я использую Динамическое изменение контекста сериализации в своем приложении, чтобы применить группу 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
},

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

Как я могу добавить это свойство в документацию и в конечном итоге использовать response-admin?

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

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

Я открыл вопрос с таким вопросом: github.com/api-platform/api-platform/issues/1072

A.L 28.03.2019 11:03
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
8
1
1 032
1

Ответы 1

Для меня документы отображаются, как и ожидалось, когда я делаю это полностью с аннотациями.

/**
* "admin_edit" = {
*     "method" = "PUT", "path" = "/api/users/{id}",
*     "normalization_context" = {"groups" = {"admin:write"}},
*     "access_control" = "is_granted('ROLE_ADMIN')"
* }
*/

По сути, вы добавляете новый маршрут для администратора, но это проще, чем использование механизма сериализации.

Другие вопросы по теме