React CASL条件不适用于生产模式-React.js

问题描述

我有条件的罐头功能。在条件满足时启用撰写消息。这在开发模式下可以正常工作,但是当我尝试在生产模式下运行它时,can方法总会给我false

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

但是canCompose总是在生产模式下返回false。 我必须更改配置吗?

解决方法

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

这是用documentation about subject type detection写的。

因此,您有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','Ticket');
    ability.can('compose',new Ticket(...))