gpt4 book ai didi

rest - FOS REST 包上的动态序列化组

转载 作者:行者123 更新时间:2023-12-05 00:23:02 25 4
gpt4 key购买 nike

我目前正在使用 FOSRESTBundleJMSSerialize制作一个 RESTFull API(当然)。

我的项目是面向客户和管理员的外联网。

这样,我必须禁止客户查看某些字段,只有管理员才能看到。

我首先为实体制作了这个序列化器配置:

AppBundle\Entity\IncidentComment:
exclusion_policy: ALL
properties:
id:
expose: true
groups: [list, details]
author:
expose: true
groups: [list, details]
addedAt:
expose: true
groups: [list, details]
content:
expose: true
groups: [details]
customerVisible:
expose: true
groups: [list_admin, details_admin]

如您所见, customerVisible群里有 _admin后缀。此字段应仅为管理员显示。

我想用 _admin 动态添加组如果用户具有例如 ROLE_ADMIN 角色或其他条件,则在 View 上设置组的后缀,而无需将其写入每个其余 Controller 的每个操作。

我正在考虑创建一个 custom view handler使用安全上下文参数添加组,但我不知道是否是正确的方法。

你认为是好方法吗?你有什么建议吗?

顺便说一句,如果某些开发人员有同样的问题,我会很高兴在这里他是如何解决它的! :)

谢谢。

最佳答案

我刚刚想出了一种在运行时添加 SerializerGroups 的简单方法:

private function determineRolebasedSerializerGroup($role, $groupToAdd, Request $request) {
if (!$this->get('security.context')->isGranted($role))
return;

$groups = $request->attributes->get('_view')->getSerializerGroups();
$groups[] = $groupToAdd;
$x = $request->attributes->get('_view')->setSerializerGroups($groups);
}

我已将此方法添加到我的 Controller 中。我现在可以这样称呼它:
/**
* @REST\View(serializerGroups={"company"})
*/
public function getCompanyAction(Company $company, Request $request) {
$this->determineRolebasedSerializerGroup('ROLE_ADMIN', 'company-admin', $request);

return $company;
}

如果当前用户具有角色“ROLE_ADMIN”,则将“company-admin”组添加到序列化程序组。这对我来说非常好。

关于rest - FOS REST 包上的动态序列化组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28989846/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com