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

CASL JS报错:无法对Article执行delete操作,请求协助排查

CASL JS 删除Article时出现"Cannot execute 'delete' on 'Article'"错误的解决方法

问题原因

CASL 权限系统遵循默认拒绝原则:所有未被明确允许的操作都会被拒绝。你的规则仅通过inverted: true定义了「禁止删除已发布的Article」,但未添加「允许删除未发布Article」的规则,因此即便目标文章是未发布状态,也会因无匹配的允许规则而被拒绝。

解决方案

提供两种可行的修改方案:

方案1:直接明确允许规则(推荐)

直接添加允许删除published: false的Article的规则,其余情况默认拒绝,实现需求的同时更简洁:

const rules = [
  {
    action: "read",
    subject: "Article"
  },
  {
    action: "delete",
    subject: "Article",
    conditions: { published: false }
  }
];

方案2:保留禁止提示的规则配置

如果需要保留「禁止删除已发布文章」的明确错误提示,可以先允许所有Article的删除操作,再通过inverted规则限制已发布的情况(CASL规则按顺序匹配,先匹配到的规则生效):

const rules = [
  {
    action: "read",
    subject: "Article"
  },
  {
    action: "delete",
    subject: "Article"
  },
  {
    inverted: true,
    action: "delete",
    subject: "Article",
    conditions: { published: true },
    reason: "You are not allowed to delete this article"
  }
];

验证

修改规则后:

  • 对于published: false的anotherArticle,ForbiddenError.from(ability).throwUnlessCan("delete", anotherArticle)不会抛出错误;
  • 若创建published: true的Article实例,会触发预设的禁止错误提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:45:42