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.
那么,你有两个选择:
在定义和检查每个类型的能力时使用 classes 而不是字符串
class Ticket {}
can('compose', Ticket, { ... });
ability.can('compose', Ticket);
ability.can('compose', new Ticket(...))
或在您的 classes 上定义静态 modelName
属性:
class Ticket {
static modelName = 'Ticket'
}
can('compose', 'Ticket', { ... });
ability.can('compose', 'Ticket');
ability.can('compose', new Ticket(...))
我有一个有条件的罐头。在满足条件时启用撰写消息。这在开发模式下工作得很好,但是当我尝试在生产模式下 运行 它时,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.
那么,你有两个选择:
在定义和检查每个类型的能力时使用 classes 而不是字符串
class Ticket {} can('compose', Ticket, { ... }); ability.can('compose', Ticket); ability.can('compose', new Ticket(...))
或在您的 classes 上定义静态
modelName
属性:class Ticket { static modelName = 'Ticket' } can('compose', 'Ticket', { ... }); ability.can('compose', 'Ticket'); ability.can('compose', new Ticket(...))