使用Api-Platform,如何在创建资源时自动将授权用户添加为资源所有者?

2023-11-22

如何在创建资源时自动将当前授权用户添加到资源中(POST).

我正在使用 JWT 身份验证,并且 /api/ 路由受到保护,免受未经授权的用户的攻击。我想对其进行设置,以便当经过身份验证的用户创建新资源时(即通过发送POST请求/api/articles)新创建的Article资源与经过身份验证的用户相关。

我目前正在使用自定义EventSubscriber每个资源类型从令牌存储添加用户。

以下是订阅者基类的要点:https://gist.github.com/dsuurlant/5988f90e757b41454ce52050fd502273

以及扩展它的实体订阅者:https://gist.github.com/dsuurlant/a8af7e6922679f45b818ec4ddad36286

但是,如果例如实体构造函数需要用户作为参数,则这不起作用。

E.g.

class Book {

    public User $owner;
    public string $name;

    public class __construct(User $user, string $name) {
        $this->owner = $user;
        $this->name  = $name;
    }
}

如何在实体创建时自动注入授权用户?


目前我正在使用DTO 和数据转换器.

主要缺点是必须为需要此行为的每个资源创建一个新的 DTO。

举一个简单的例子,我正在做这样的事情:

class BootDtoTransformer implements DataTransformerInterface
{

    private Security $security;

    public function __construct(Security $security)
    {
        $this->security = $security;
    }

    public function transform($data, string $to, array $context = [])
    {

        $owner = $this->security->getUser();

        return $new Book($owner, $data->name);;
    }

    public function supportsTransformation($data, string $to, array $context = []): bool
    {

        if ($data instanceof Book) {
            return false;
        }

        return Book::class === $to && null !== ($context['input']['class'] ?? null);
    }

}

从逻辑上讲,这仅适用于单个资源。为了拥有一个用于多个资源的通用转换器,我最终使用一些接口来分隔“可拥有的”资源,并进行一些反射来实例化每个类。

我本以为这在非规范化阶段是可行的,但我无法让它发挥作用。

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

使用Api-Platform,如何在创建资源时自动将授权用户添加为资源所有者? 的相关文章

  • 在 PHP 数组定义中显示重复键警告

    下面的代码是否可以得到警告 error reporting E ALL s array a gt 1 a gt 1 var export s 你唯一的希望 除了count 你自己 是你的编辑足够聪明 可以突出显示拼写错误 此屏幕截图来自 P
  • 如何配置 nginx 重写规则以使 CakePHP 在 CentOS 上运行?

    大家好 请帮帮我 我正在尝试在运行 Nginx 和 Fact CGI 的 Centos 服务器上设置 cakephp 环境 我已经在服务器上运行了一个 WordPress 站点和一个 phpmyadmin 站点 因此我已经正确配置了 PHP
  • 在多维数组 PHP 的所有键中搜索

    我想在多维数组中的所有键中搜索特定字符串 我只需要弄清楚它是否存在 仅此而已 我想知道访问者的 IP 是否存在于任何数组中 有没有我可以用来执行此操作的 php 函数或方法 我尝试过的每个函数或方法总是返回 false 数组中 数组搜索 数
  • 从 freshdesk api 获取所有用户时获取curl_error(): 2 不是有效的 cURL 句柄资源

    我正在创建自己的系统来管理通过其 API 来自 freshdesk com 的所有票证 我正在发出curl 请求以从freshdesk com 获取数据 通过获取与股票相关的数据 它的工作正常 但是当我通过curl请求请求所有用户时 它会给
  • AWS S3从本地主机批量上传php错误

    我在尝试着批次 散装从本地主机 xampp 上传到我的S3 bucket 它似乎适用于大约 6 个项目 然后我收到一条错误消息 cURL 错误说Failed sending network data from http curl haxx
  • PHP 异常处理与 C#

    这是一个非常基本的问题 我希望如此 我所做的大部分异常处理都是使用 C 进行的 在 C 中 任何在 try catch 块中出错的代码都会由 catch 代码处理 例如 try int divByZero 45 0 catch Except
  • Codeigniter PHP - 在锚点加载视图

    我在一个长页面的底部有一个表单 如果用户填写了表单但它不验证页面是否以典型的 codeigniter 方式重新加载 this gt load gt view template data 然而 由于表单位于页面底部 我需要将页面加载到那里 就
  • PHP 删除字符最后一个实例之前的所有内容

    有没有办法删除某个字符之前的所有内容 包括最后一个实例 我有多个字符串 其中包含 gt e g the gt cat gt sat gt on gt the gt mat welcome gt home 我需要对字符串进行格式化 以便它们变
  • Laravel 5.4 将json保存到数据库

    帮我将 json 保存到数据库 表字段类型 文本 我有带有强制转换数组的模型 class Salesteam extends Model protected casts team members gt array 我想要像这样 index
  • 转义用户数据,无需魔法引号

    我正在研究如何在来自外部世界的数据被用于应用程序控制 存储 逻辑等之前正确地对其进行转义 显然 随着 magic quote 指令在 php 5 3 0 中很快被弃用 并在 php6 中被删除 对于任何想要升级并进入新语言功能 同时维护遗留
  • Symfony 生成器形式、原则和 M:N 关系

    我有一个基本的 M N 设置 包含三个表 candidate position 和 Candidate position 这是 MySQL Workbench 的 ERD 屏幕截图 现在 我们继续讨论表单 在 symfony 生成器的默认世
  • PHP 中的静态类初始值设定项

    我有一个带有一些静态函数的辅助类 类中的所有函数都需要一个 重 初始化函数来运行一次 就好像它是一个构造函数 有实现这一目标的良好实践吗 我唯一想到的就是打电话init函数 如果它已经运行过一次 使用静态 initialized变种 问题是
  • CryptoJS 使用密码加密 AES,但 PHP 解密需要密钥

    我在用CryptoJS https code google com p crypto js AES加密字符串 function doHash msg msg String msg var passphrase aggourakia var
  • 在另一个文件中扩展类的正确方法是什么?

    这就是我在 foo php 中的内容 class Foo public foo NULL public foo2 NULL public function setFoo foo foo2 this gt foo foo this gt fo
  • 在 mysqli 准备好的语句程序风格中获取最后插入的 id 的正确方法是什么?

    我正在使用 mysqli 准备好的语句在表中插入记录 如下所示 link mysqli connect localhost my user my password world check connection if link printf
  • 优雅地退出 Laravel 作用域

    我有一个范围 它根据用户角色以限制方式起作用 您可以将一组规则转发到限制数据库最终输出的范围 一个非常简化的角色限制示例 first name foo 只会返回其记录first name开始于foo 这实际上意味着我已禁止具有该角色的用户查
  • 为什么 asort 适用于多维数组?

    抱歉 如果这是一个非常基本的问题 我无意中发现asort http php net manual en function asort php似乎适用于多维数组 示例 PHP animals array 1 gt array name gt
  • Yii 未检测到骆驼案例操作

    伊伊正在给我404 Error如果我声明这样的操作 站点控制器 php public function actionRegisterUser 这就是我在main php label gt Register User url gt site
  • PHP 中的异或加密

    我是 Xor 加密的新手 并且在使用以下代码时遇到了一些问题 function xor this string Let s define our key here key magic key Our plaintext ciphertext
  • PHP 中根据相似值对数组进行分组

    我有一个具有以下结构的数组

随机推荐