标签: api-platform.com

api-platform:如何安全地进行自定义操作

我想知道如何使用api平台保护自定义项的操作,我在文档中找到了以下代码:

/**
 * Secured resource.
 *
 * @ApiResource(
 *     attributes={"access_control"="is_granted('ROLE_USER')"},
 *     collectionOperations={
 *         "get"={"method"="GET"},
 *         "post"={"method"="POST", "access_control"="is_granted('ROLE_ADMIN')"}
 *     },
 *     itemOperations={
 *         "get"{"method"="GET","access_control"="is_granted('ROLE_USER') and object.owner == user"}
 *     }
 * )
 * @ORM\Entity
 */
Run Code Online (Sandbox Code Playgroud)

但我想做类似的事情:

/**
 * @ApiResource(itemOperations={
 *     "get"={"method"="GET"} //Public route,
 *     "special"={"route_name"="special", "access_control"="is_granted('ROLE_ADMIN') or object.owner == user"}},
 *     "special2"={"route_name"="special2",  "access_control"="is_granted('ROLE_USER')"}
 * })
 */
Run Code Online (Sandbox Code Playgroud)

它行得通吗?还是我必须检查特殊Action文件中的用户角色?

在这种情况下,最佳做法是什么?

php symfony api-platform.com

2
推荐指数
1
解决办法
1736
查看次数

如何在保护路线时使用graphiql?

我有一个基于 api 平台的应用程序,使用 JWT(和 LexikJWTBundle)具有安全路由。使用 Swagger 接口,可以轻松调用提供有效承载的安全路由。但是使用 GraphiQL 我看不到任何有关安全性的信息,因此当调用安全路由时它会失败。

任何的想法 ?或者我们应该防止在 dev 中使用 graphiql 吗?

谢谢

symfony graphql graphiql api-platform.com

2
推荐指数
1
解决办法
3081
查看次数

使用Api平台,自动将用户分配给对象(OneToMany)

这是我的情况:

我有一个Article实体。每篇文章都有一个所有者(a User)。用户可以拥有许多文章。用户可以通过API发布文章。

我想user_id基于Bearer令牌自动设置文章的列(我正在使用JWT auth)。

我找不到任何有关如何执行此操作的文档。有人可以帮忙实现此目标吗?

注意:我正在寻找避免可能的情况下避免在Symfony中使用其他扩展(或控制器)的解决方案。我相信Api Platform应该可以使用内置技术来实现这一目标,但是我可能是错的。

这是我的实体:

用户:

<?php

namespace App\Entity;

use ApiPlatform\Core\Annotation\ApiResource;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Symfony\Component\Security\Core\User\UserInterface;

/**
 * @ApiResource()
 * @ORM\Table(name="users")
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 * @UniqueEntity(fields="email", message="Email already taken")
 */
class User implements UserInterface, \Serializable
{

    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string $password
     *
     * @ORM\Column(type="string", length=64)
     * @Assert\NotBlank()
     */
    private $password;

    /**
     * @var …
Run Code Online (Sandbox Code Playgroud)

php entity-relationship doctrine symfony api-platform.com

2
推荐指数
1
解决办法
1363
查看次数

创建自定义操作和控制器示例不起作用

我刚刚尝试了https://api-platform.com/docs/core/operations/#recommended-method示例。

  1. Book.class按照描述生成了
  2. 添加CreateBookPublication班级
  3. 如果我调用 API,我会收到以下错误:

(1/1) RuntimeException 无法自动装配服务“App\Controller\CreateBookPublication”:方法“__construct()”的参数“$bookPublishingHandler”的类型为“App\Controller\BookPublishingHandler”,但未找到此类。

你有什么主意吗?我想生成一个自己的硬编码响应,没有用于测试目的的学说。

api-platform.com

2
推荐指数
1
解决办法
772
查看次数

在单个查询中过滤多个字段的查询

我的设置是 Symfony 5,最新的 API-Platform 版本在 PHP 7.3 上运行。所以我希望能够查询姓名和用户名(甚至可能是电子邮件)。我需要编写自定义解析器吗?

这是我到目前为止所尝试的,但这导致 WHERE name = $name AND username = $name。

query SearchUsers ($name: String!) {
  users(name: $name, username: $name) {
    edges {
       cursor
       node {
         id
         username
         email
         avatar
       }
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

我的实体:

/**
 * @ApiResource
 * @ApiFilter(SearchFilter::class, properties={
 *   "name": "ipartial",
 *   "username": "ipartial",
 *   "email": "ipartial",
 * })
 *
 * @ORM\Table(name="users")
 * @ORM\Entity(repositoryClass="Domain\Repository\UserRepository")
 * @ORM\HasLifecycleCallbacks()
 */
class User
{
  private $name;
  private $username;
  private $email;
  // ... code omitted ... …
Run Code Online (Sandbox Code Playgroud)

php symfony graphql api-platform.com

2
推荐指数
2
解决办法
2295
查看次数

如何在 symfony 中使用 api-platform 来编辑帖子数据?

我是 symfony 的新手,但主要是 api 平台。所以我查看了api-platform以了解更多信息。我读了很大部分,信息量很大。但我只是找不到一种方法来使用 openAPI 来获取编辑帖子数据。我也在使用学说和 SQLite

所以我所说的编辑帖子数据是什么意思。我安装了 api-platform 并让它工作(看起来像,this)。我可以在 url www.localhost/api 上使用我的 api-platform POST 数据,然后在 Role 下选择 POST,然后“try out”。我在学说中做了一个小表格,所以我发送给它的 JSON 是;

{
  "role": "string"
}
Run Code Online (Sandbox Code Playgroud)

这样就可以了,它将数据添加到我的 SQLite 数据库中。但我想在 PHP 中编辑这些数据。但我就是不知道如何检索这个 JSON 并编辑我从 JSON 中获得的数据。

我所拥有的是;名为 Role 和 RoleRepository 的实体和存储库。我读过一个控制器不需要使用 api-platform 编辑数据。但我无法在任何地方找到如何编辑数据。

那么如何编辑从 JSON 中获得的数据呢?

编辑:如果您想知道我的实体角色是什么样的;

<?php
namespace App\Entity;

use App\Repository\RoleRepository;
use ApiPlatform\Core\Annotation\ApiResource;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ApiResource()
 * @ORM\Entity(repositoryClass=RoleRepository::class)
 */
class Role
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue …
Run Code Online (Sandbox Code Playgroud)

symfony api-platform.com

2
推荐指数
1
解决办法
143
查看次数

API Platform 3 不在响应正文中返回空数据

在 API Platform 2.7 中,响应正文包含具有 null 值的字段,升级到 API Platform 3 后,响应正文不包含具有 null 值的字段。这是故意的还是由于我需要进行配置更改。

我从 api/docs 页面为 2.7 和 3.0 执行了相同的调用,我希望结果是相同的。

API Platform 2.7 类 Patient 的响应 { "@context": "/api/contexts/Patient", "@id": "/api/患者/8110", "@type": "Patient", "account": " /api/accounts/8110"、"accountId": 8110、"isDependent": false、"isGuardian": false、"组织": "/api/organizations/765"、"电子邮件": null、"标题": null ,“firstName”:“CA”,“middleInitial”:“A”,“lastName”:“患者”,“后缀”:null,“photoMedia”:null,“sex”:“男性”,“birthDate”:“ 2000-01-01T00:00:00+00:00", "addressLineOne": "5759 Witting Corners", "addressLineTwo": null, "city": "Marvintown", "zipCode": "35507", "state" : { "@id": "/api/states/681", "@type": "州", "缩写": "CA" }, "电话号码": "617-491-0000", "手机号码": null, "工作编号": null }

API Platform 3.0 类 Patient 的响应 { "@context": "/api/contexts/Patient", …

api-platform.com

2
推荐指数
1
解决办法
882
查看次数

新 api 平台 docker-compose 上的 502 错误网关

我在 Digital Ocean 上有 docker,并且仍在尝试弄清楚如何使用 api 平台。所以我在端口 80 上的 api-platform-2.3.0 默认页面中的 docker-compose up 正常加载,但是当我转到 8080 时,它显示了错误的网关。所以我查了一下一切是否加载正常,看来 PHP 有问题。

\n\n
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS                        PORTS                                                                    NAMES\n0a0c4724d2d5        api_h2-proxy                   "nginx -g \'daemon of\xe2\x80\xa6"   18 minutes ago      Up 18 minutes                 0.0.0.0:443-444->443-444/tcp, 80/tcp, 0.0.0.0:8443-8444->8443-8444/tcp   api_h2-proxy_1\n9958631ba1b8        quay.io/api-platform/varnish   "docker-varnish-entr\xe2\x80\xa6"   18 minutes ago      Up 18 minutes                 0.0.0.0:8081->80/tcp                                                     api_cache-proxy_1\n68de4a5058dd        quay.io/api-platform/nginx     "nginx -g \'daemon of\xe2\x80\xa6"   18 minutes ago      Up 18 minutes                 0.0.0.0:8080->80/tcp                                                     api_api_1\nf805ffdd804d        quay.io/api-platform/php       "docker-entrypoint p\xe2\x80\xa6"   18 minutes ago      Exited (126) 18 minutes ago                                                                            api_php_1\nb020f888b81d        postgres:9.6-alpine            "docker-entrypoint.s\xe2\x80\xa6"   19 …
Run Code Online (Sandbox Code Playgroud)

php docker docker-compose bad-gateway api-platform.com

1
推荐指数
1
解决办法
2915
查看次数

Symfony api平台使用控制器

我在 symfony 4 中使用 api 平台,我有疑问

我想知道如何使用 api 平台创建一个控制器并在 get 中创建 2 个路由

我向您展示我现在所做的事情:

我的控制器:

/**
 * @var UnedicPublicationOrderRepository
 */
private $publicationOrderRepository;

public function __construct(UnedicPublicationOrderRepository $publicationOrderRepository)
{
    $this->publicationOrderRepository = $publicationOrderRepository;
}


public function __invoke()
{
    $cible = $this->publicationOrderRepository->findAll();

    return $cible;
}
Run Code Online (Sandbox Code Playgroud)

和我的发布实体

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use ApiPlatform\Core\Annotation\ApiResource;

/**
 * UnedicPublicationOrderController
 *
 * @ApiResource(
 *     collectionOperations={"get"={"method"="GET"}},
 *     itemOperations={
 *     "get"={"method"="GET", "path"="/publication/{cible}"},
 *     }
 * )
 * @ORM\Table(name="foo")
 * @ORM\Entity
Run Code Online (Sandbox Code Playgroud)

php api symfony api-platform.com

1
推荐指数
1
解决办法
1万
查看次数

如何在“/api”文档 api-platform 上添加我的自定义错误

我正在使用 Symfony 4 和 Api-Platform 开发一个应用程序。

xxxException根据这些文档创建了一个自定义错误。我在手术后使用过它,效果很好。

现在我想在访问some-url/api.

怎样做,才会出现下图这样的情况呢?

在此输入图像描述

error-handling symfony api-platform.com

1
推荐指数
1
解决办法
2383
查看次数