php - Symfony ApiPlatform:在实体中作为序列化程序/组的角色是个好主意吗?
问题描述
我在应用程序中有很多角色,包括。super_admin, admin, user, moderator, editor ... 我想使用 apiPlatform 并在实体中为角色适当地显示适当的字段,我还制作了额外的类,将角色转换为类。一切正常。但是,它打破了序列化程序中组的想法。例如:我有几个相互关联的实体。当我是管理员并想要下载实体时,即使我不使用它们,“admin:read”组的所有属性都将下载 + 相关类的所有属性也包含“admin:read”组。没事吧?在实体中使用角色是个好主意吗?还有另一种更好的方法吗?
来自https://api-platform.com/docs/core/serialization/的示例
课本
<?php
// api/src/Entity/Book.php
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
use Symfony\Component\Serializer\Annotation\Groups;
#[ApiResource(normalizationContext: ['groups' => ['book']])]
class Book
{
/**
* @Groups({"book"})
*/
public $name;
/**
* @Groups({"book"})
*/
public $author;
// ...
}
班级人
<?php
// api/src/Entity/Person.php
namespace App\Entity;
use ApiPlatform\Core\Annotation\ApiResource;
use Symfony\Component\Serializer\Annotation\Groups;
#[ApiResource]
class Person
{
/**
* ...
* @Groups("book")
*/
public $name;
// ...
}
结果
{
"@context": "/contexts/Book",
"@id": "/books/62",
"@type": "Book",
"name": "My awesome book",
"author": {
"@id": "/people/59",
"@type": "Person",
"name": "Kévin Dunglas"
}
}
因此,如果您键入“admin:read”而不是“book”,它将始终序列化具有组“admin:read”的所有内容。我认为它正在获取不必要的数据。我想强调的是,有很多实体,不像两个/几个的例子。
解决方案
我认为在序列化中添加角色是个好主意,但是当您在序列化中添加角色时,您应该装饰 api_platform.serializer.context_builder 请参阅本节https://api-platform.com/docs/core/serialization/#chang -序列化上下文动态
推荐阅读
- xpath - 未从晨星导入数据表
- amazon-web-services - 无服务器框架 - 如何禁用到 AWS Lambda 函数的所有 API 路由并仅使用 SNS
- go - 关机后 Gorilla mux 重用/重新启动服务器
- swift - 从 firestore 分配用户名值
- c - Defining constant in c with const keyword
- javascript - 有没有更漂亮的方法来捕获 JSON 数组块上的错误?
- django-models - 在表“app_job”上插入或更新违反了外键约束“app_job_user_id”详细信息:表“accounts_user”中不存在键(user_id)=(1)
- c - 如何使用具有显式子 pid 的多个 waitpid() 作为特定进程执行顺序的参数
- macos - 程序集——macOS上的`.text`和`.section __TEXT`之间的区别?
- php - 获取 Query_String 被截断 - Apache access.log 具有完整字符串,error.log 显示截断符号 QUERY_STRING 值