如何从 API Platform 文档中隐藏路由

2023-11-26

我正在 Symfony 4 下使用 API Platform 构建 API,

我想隐藏文档中的一个实体,该实体只能由打击的 ROLE_ADMIN 访问,没有兴趣在文档中可见。

这是我要隐藏的实体:

<?php

namespace App\Entity;

use ApiPlatform\Core\Annotation\ApiResource;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Serializer\Annotation\Groups;

/**
 * @ApiResource(
 *     attributes={"access_control"="is_granted('ROLE_ADMIN')"}
 * )
 * @ORM\Entity(repositoryClass="App\Repository\OrderStatusRepository")
 */
class OrderStatus
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=255)
     * @Groups("orderGET")
     */
    private $label;

    /**
     * @return int|null
     */
    public function getId(): ?int
    {
        return $this->id;
    }

    /**
     * @return null|string
     */
    public function getLabel(): ?string
    {
        return $this->label;
    }

    /**
     * @param string $label
     * @return OrderStatus
     */
    public function setLabel(string $label): self
    {
        $this->label = $label;

        return $this;
    }
}

感谢您的帮助


Symfony允许装饰服务,这里我们需要装饰api_platform.openapi.factory

Create src/OpenApi/OpenApiFactory.php具有以下内容:

<?php

namespace App\OpenApi;

use ApiPlatform\Core\OpenApi\Factory\OpenApiFactoryInterface;
use ApiPlatform\Core\OpenApi\Model\PathItem;
use ApiPlatform\Core\OpenApi\OpenApi;

class OpenApiFactory implements OpenApiFactoryInterface
{
    /**
     * @var OpenApiFactoryInterface
     */
    private $decorated;

    public function __construct(OpenApiFactoryInterface $decorated)
    {
        $this->decorated = $decorated;
    }

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

        /** @var PathItem $path */
        foreach ($openApi->getPaths()->getPaths() as $key => $path) {
            if ($path->getGet() && $path->getGet()->getSummary() === 'hidden') {
                $openApi->getPaths()->addPath($key, $path->withGet(null));
            }
        }

        return $openApi;
    }
}

注册一下

services:
    App\OpenApi\OpenApiFactory:
        decorates: 'api_platform.openapi.factory'
        arguments: ['@App\OpenApi\OpenApiFactory.inner']
        autoconfigure: false

Add openapi_context到您想要隐藏的每条路线

 * @ApiResource(
 *   itemOperations={
 *          "get"={
 *              ...
 *              "openapi_context"={
 *                  "summary"="hidden"
 *              }
 *          }
 *   }
 * )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 API Platform 文档中隐藏路由 的相关文章

随机推荐

  • Qt5.6:高DPI支持和OpenGL(OpenSceneGraph)

    我有一个最小的应用程序 它使用QOpenGLWidget集成了 OpenGL 包装库 OpenSceneGraph 我试图弄清楚在处理我使用的 OpenGL 内容时如何正确使用 Qt5 6 对高 DPI 屏幕的支持 My main 函数有以
  • Vite + ESBuild错误:没有为“.node”文件配置加载器:node_modules/fsevents/fsevents.node

    我对 ReactJS 和 Vite 很陌生 我正在编写一些教程 突然开始出现以下错误 我尝试重新安装node modules但没有成功 错误 没有为 node 文件配置加载程序 node modules fsevents fsevents
  • Spring @Transactional 注释不能与自动装配一起使用?

    我的应用程序使用 Spring 自动装配来配置 bean 我刚刚尝试添加 Transactional 预期的代理似乎没有被调用 我希望 PersonalController 使用事务代理包装的 UpdatePublicMapService
  • 从 dotnet Core 2.2.6 更改为 3.0.0 后出现 EF Linq 错误

    我正在尝试将解决方案升级到新的 Core Framework 3 0 0 现在我有一个小问题我不明白 看一下 这个方法在2 2 6中是没有问题的 public async Task
  • Gulp 错误:观看 ENOSPC

    您好 我在运行 gulp watch 时收到此错误 我在用着vueify在 Laravel 项目中 为什么会发生这种情况 这几天一直运行良好 今天就到了 gulp watch 12 56 01 Using gulpfile Document
  • 成功的特定领域语言?您使用哪一款? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我对领域特定语言的设计和实
  • 在 EAP 6.4.0 中使用 JPA 2.1

    我寻找这个问题的解决方案 到目前为止还没有成功 我们正在将应用程序迁移到 EAP 6 4 0 并且我们的应用程序依赖于 JPA 2 1 然而 JBoss 是一个 Java EE 6 服务器 因此以模块的形式包含 JPA 2 0 我尝试将 J
  • 如何使用 JavaScript 导航到不同的页面

    我目前正在使用以下代码将用户重定向到 C 中的另一个页面 Response Redirect somepage aspx 不过 我想用 JavaScript 来完成此操作 试试下面的代码
  • 如何从SQLite数据库中获取特定月份的数据

    我将数据保存在 SQLite 数据库中 我将日期保存在数据库中作为 DATETIME 数据类型 我只想从 SQLite 数据库中检索特定月份的数据 我尝试使用以下查询来检索数据 但它没有用 它为我提供了数据 但不是特定月份 SELECT c
  • 如何在集群中运行的节点中选举主节点?

    我正在编写一个托管云堆栈 在 EC2 等硬件级云提供商之上 我很快将面临的一个问题是 几个相同的节点如何决定其中哪一个成为主节点 即考虑在 EC2 上运行 5 台服务器 其中一台必须成为主服务器 其他服务器必须成为从服务器 我读到了一个描述
  • 删除 Django 登录表单中电子邮件的区分大小写

    我创建了一个自定义 UserModel 并使用电子邮件作为主要身份验证 ID 而不是用户名 问题是大小写敏感 因为它很重要 电子邮件受保护 电子邮件受保护 作为2个不同的帐户 我需要强制它作为 1 个帐户来处理 忽略它是大写还是小写 这是我
  • 如何在 CI 服务器上的 ASP.NET 网站上使用 NuGet 包

    我有许多 ASP NET Web 表单网站 没有 csproj 文件的网站 我正在尝试找出如何最好地使用它们的 NuGet 包 使用 Visual Studio 2015 时 通过 UI 添加 NuGet 包可以正常工作 站点根目录中有一个
  • 如何获得一个国家的城市边界

    我想从芬兰的 OSM 中提取城市特定数据 我有芬兰的数据 但我只需要 5 个城市的数据 赫尔辛基 埃斯波 万塔 考尼亚宁和 Siuntio 我可以提取赫尔辛基所需的数据 但我需要其余城市的城市边界 这样我可以制作一个多边形 如果我有多边形
  • python 中关键字参数值的命名空间是什么?

    我知道自从我发现 python 以不同的方式对待这个命名空间 def foo l l append 1 print l foo foo foo foo 打印以下内容 1 1 1 1 1 1 1 所以我对它们用作对象初始值设定项持怀疑态度 然
  • 如何获取 StackPanel 中元素的位置?

    假设我有一个 StackPanel 它会动态填充副本 从而更改其中元素的 Y 位置 我在该 StackPanel 中有一个特定元素 我想在 StackPanel 重新定位其所有子元素后找到该元素的 Y 位置 相对于 StackPanel 或
  • Python 2.7 如何解析格式为 2014-05-01 18:10:38-04:00 [重复]

    这个问题在这里已经有答案了 我正在尝试解析这个日期时间字符串 但尚未成功 我该如何获取它 d 2014 05 01 18 10 38 04 00 datetime datetime strptime d Y m d H M S Z Valu
  • 安装 Homebrew Python 后 Python 包位于错误的位置?

    将 Homebrew 的 Python 安装到已安装 Apple Python 的系统上后 列出的最后一个条目sys path使用 Homebrew 的 Python 是 Library Python 2 7 site packages u
  • 将 pandas DateTimeIndex 转换为 Unix 时间?

    将 pandas DateTimeIndex 转换为 Unix 时间 可迭代 的惯用方法是什么 这可能不是要走的路 time mktime t timetuple for t in my data frame index to pydate
  • Python 3.3+ 中的包不需要 __init__.py

    我正在使用Python 3 5 1 我在这里阅读了文档和包部分 https docs python org 3 tutorial modules html packages 现在 我有以下结构 home wujek Playground a
  • 如何从 API Platform 文档中隐藏路由

    我正在 Symfony 4 下使用 API Platform 构建 API 我想隐藏文档中的一个实体 该实体只能由打击的 ROLE ADMIN 访问 没有兴趣在文档中可见 这是我要隐藏的实体