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

如何通过AdminJS结合MongoDB ObjectID过滤资源,仅展示当前管理员的Items?

问题解决:仅展示当前管理员的Items资源

错误原因分析

  • 未处理context.currentAdmin为null的场景(比如未登录状态),直接访问_id会触发后续链式错误
  • 对AdminJS的查询格式理解有误:filters是嵌套对象,不能直接以['filters.user']作为顶层键赋值

修正后的代码

const customBefore = (request: { query: any }, context: any) => {
  const { query = {} } = request;
  // 先处理currentAdmin为空的情况,避免报错
  if (!context.currentAdmin) {
    // 未登录时返回空查询,可根据实际需求调整逻辑
    request.query = { ...query, filters: { user: null } };
    return request;
  }

  // 正确构造filters对象:合并原有过滤条件,添加当前管理员的user过滤规则
  const existingFilters = query.filters || {};
  const newFilters = {
    ...existingFilters,
    user: context.currentAdmin._id
  };

  request.query = {
    ...query,
    filters: newFilters
  };

  return request;
};

额外注意事项

  • 确保Items Schema中user字段是引用User Schema的ObjectId类型
  • 如果AdminJS配置里Items资源的user字段已设为关联字段,该过滤逻辑会自动生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:55:58