0

我有一个有条件的功能。在条件满足时启用编写消息。这在开发模式下完美运行,但是当我尝试在生产模式下运行它时,can 方法总是给我false

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

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

4

1 回答 1

3

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

这写在有关主题类型检测的文档中。

因此,您有 2 个选择:

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

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

    class Ticket {
      static modelName = 'Ticket'
    }
    
    can('compose', 'Ticket', { ... });
    
    ability.can('compose', 'Ticket');
    ability.can('compose', new Ticket(...))
    
于 2020-09-08T06:46:44.290 回答