在文档中隐藏特定角色的端点

问题描述 投票:0回答:1

我有一个具有多个角色的 API,我想在文档和 /api 入口点中隐藏特定角色的一些端点。有简单的方法吗?

我发现了这个问题

如何从API平台文档中隐藏路由

但它完全隐藏了端点。

symfony swagger-ui api-platform.com symfony-security
1个回答
0
投票

您应该按照此处所述进行操作。

您还应该使用 Symfony 安全组件实现角色检查,以决定是否显示端点。

<?php

namespace App\OpenApi;

use ApiPlatform\Core\OpenApi\Factory\OpenApiFactoryInterface;
use ApiPlatform\Core\OpenApi\Model\PathItem;
use ApiPlatform\Core\OpenApi\OpenApi;
use Symfony\Component\Security\Core\Security;

class OpenApiFactory implements OpenApiFactoryInterface
{
    public function __construct(
        private readonly OpenApiFactoryInterface $decorated
        private readonly Security $security
    ) {
    }

    public function __invoke(array $context = []): OpenApi
    {
        $openApi = $this->decorated->__invoke($context);

        /** @var PathItem $path */
        foreach ($openApi->getPaths()->getPaths() as $key => $path) {
            if ($this->security->isGranted('ROLE_USER')) {
                // Add logic to hide or modify the path for non-admin users
            }
        }

        return $openApi;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.