React CASL 条件在生产模式下不起作用 - Reactjs

React CASL conditions not working in production mode - Reactjs

我有一个有条件的罐头。在满足条件时启用撰写消息。这在开发模式下工作得很好,但是当我尝试在生产模式下 运行 它时,can 方法总是给我 false

can('compose', 'Ticket', {
   phase: 'Tier 3',
});
const ticket = new Ticket({ phase: 'Tier 3' })
const canCompose = (ability.can('compose', ticket));

但 canCompose 在生产模式下总是 return false。 我必须更改配置中的任何内容吗?

是的,在生产模式下,所有 class 名称和函数名称都被破坏(即缩小)。这就是为什么 CASL 无法正确确定主题类型的原因。

这是写在documentation about subject type detection.

那么,你有两个选择:

  1. 在定义和检查每个类型的能力时使用 classes 而不是字符串

    class Ticket {}
    can('compose', Ticket, { ... });
    
    ability.can('compose', Ticket);
    ability.can('compose', new Ticket(...))
    
  2. 或在您的 classes 上定义静态 modelName 属性:

    class Ticket {
      static modelName = 'Ticket'
    }
    
    can('compose', 'Ticket', { ... });
    
    ability.can('compose', 'Ticket');
    ability.can('compose', new Ticket(...))