如何通过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
相关产品推荐
相关产品推荐

