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

Directus 10.6.2 CSV导入Hook中设置产品分类关联遇FORBIDDEN错误

Directus 10.6.2 Hook CSV导入关联分类时FORBIDDEN错误解决

问题场景

在Directus 10.6.2中开发Hook扩展,实现CSV导入products集合时,通过自定义列category:name自动匹配或创建categories分类条目,但设置input.categories = [分类ID]关联字段时,始终触发FORBIDDEN错误。分类的查找、创建逻辑正常,仅关联步骤失败。

原因分析

  1. 权限上下文缺失:Hook中创建ItemsService时仅传入了schema,未携带请求的权限上下文(accountability),导致修改关联字段时权限校验不通过。
  2. 用户权限不足:执行CSV导入的用户,可能未被授予products.categories字段的编辑权限,或缺少categories集合的读、创建权限。

解决方案

1. 传递完整权限上下文

从Hook参数中获取accountability并传递给ItemsService,确保操作使用当前请求用户的权限身份。同时记得清理临时字段,避免Directus尝试写入不存在的列。

修改后的代码:

const CATEGORY_NAME_KEY = 'category:name';

filter('products.items.create', async (
    input: Partial<Product> | any,
    { collection }: { collection: string },
    { schema, accountability }: { schema: object, accountability: object }
) => {
    // 传入accountability确保权限上下文完整
    const categoriesCollection = new ItemsService('categories', { schema, accountability });

    try {
        const [ existingCategory ] = await categoriesCollection.readByQuery({ filter: {
            name: input[CATEGORY_NAME_KEY],
        }});
        
        if (existingCategory?.id) {
            input.categories = [ existingCategory.id ];
        } else {
            const newCategoryID = await categoriesCollection.createOne({
                name: input[CATEGORY_NAME_KEY],
            });
            
            input.categories = [ newCategoryID ];
        }
        // 删除临时字段,避免导入时触发字段不存在错误
        delete input[CATEGORY_NAME_KEY];
    } catch(error) {
        logger.error(error);
    }

    return input;
});

2. 检查并配置权限

确认执行导入的用户拥有以下权限:

  • products集合中categories字段的编辑权限
  • categories集合的读权限和创建权限

3. (可选)强制使用管理员权限(不推荐生产环境)

如果导入用户权限无法调整,可在Hook中强制使用管理员上下文执行操作,但会绕过权限校验,需谨慎使用:

const categoriesCollection = new ItemsService('categories', { 
    schema, 
    accountability: { role: 'admin', user: null }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:23:34