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

Strapi v5认证API过滤报错Invalid key referrant 问题求助

Strapi v5 多对多关联表权限过滤问题解决

问题原因

当API权限设为公开时,Strapi会跳过字段级权限校验,因此你能通过referrant字段正常过滤;但切换为Referrant角色认证后,Strapi的权限系统会严格校验请求中涉及的所有字段的访问权限——你仅给了Referrant角色访问ReferrantToAgent列表的权限,却未开放该模型中referrant关联字段的读权限,导致过滤时触发"Invalid key referrant"的校验错误。

解决步骤

1. 配置字段级权限

  • 进入Strapi后台,依次打开 Settings → Users & Permissions Plugin → Roles
  • 找到Referrant角色,进入其权限配置页
  • 定位到ReferrantToAgent模型的权限项:
    • 确保find(列表查询)权限已开启
    • 点击find权限旁的齿轮图标,进入字段权限配置界面
    • 在字段列表中找到referrant关联字段,勾选它的读权限,保存配置

2. 优化请求逻辑(安全升级)

手动传递referrant的ID存在被篡改的风险,建议通过自定义策略自动注入当前登录用户的ID:

  • 在src/api/referrant-to-agent/policies目录下创建filter-by-current-referrant.js:
module.exports = async (policyContext, config, { strapi }) => {
  const currentReferrantId = policyContext.state.user.documentId;
  policyContext.query.filters = {
    ...policyContext.query.filters,
    referrant: { documentId: { $eq: currentReferrantId } }
  };
  return true;
};
  • 修改src/api/referrant-to-agent/routes/referrant-to-agent.js,给find路由绑定策略:
module.exports = {
  routes: [
    {
      method: 'GET',
      path: '/referrant-to-agent',
      handler: 'referrant-to-agent.find',
      config: {
        policies: ['plugin::users-permissions.isAuthenticated', 'api::referrant-to-agent.filter-by-current-referrant'],
      },
    },
    // 保留其他原有路由
  ],
};
  • 之后用户只需请求GET /api/referrant-to-agent?populate=agent,系统会自动过滤当前用户的关联数据,无需手动传参。

3. 验证效果

重启Strapi服务,用Referrant角色的有效JWT令牌发起请求,确认过滤功能正常,不再返回权限校验错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:37:24