You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Symfony API Platform下如何让@Assert\NotBlank仅对管理员生效

问题原因

序列化/反序列化组和Symfony校验组是两套完全独立的配置体系,你通过AdminGroupsContextBuilder添加的admin:write仅作用于反序列化字段权限控制,并不会自动同步到校验流程中。API Platform默认执行校验时仅加载Default组,你给@Assert\NotBlank指定的admin:write校验组没有被加载,所以规则不会触发。

解决方案

你后续补充的动态校验组生成器方案是正确的,核心逻辑如下:

  • 实现ValidationGroupsGeneratorInterface,根据当前登录用户的权限动态返回需要加载的校验组列表,管理员账号返回时额外加入admin:write组
  • 在@ApiResource注解的validation_groups参数中指定你实现的生成器类,API Platform执行校验前会自动调用该类获取要加载的校验组

额外注意

你当前的IsValidCompanyValidator中有一处逻辑错误:

// 原错误逻辑:拿公司ID和用户ID直接对比
if ($value->getId() !== $user->getId()) {

应该修正为对比用户关联的公司ID:

if ($value->getId() !== $user->getCompany()->getId()) {

否则非管理员用户传入自己所属公司也会触发校验错误。

内容的提问来源于stack exchange,提问作者algorun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:18:02