Reactjs 如何将普通对象传递给CASL的权限(React)

Reactjs 如何将普通对象传递给CASL的权限(React),reactjs,casl,Reactjs,Casl,如何将条件传递给与能力对象中的条件匹配的组件 向我的应用程序公开权限的AbilityBuilder: AbilityBuilder.define((can, cannot) => { cannot('delete', 'user', { role: 2 }) // <- 2 }); AbilityBuilder.define((可以,不能)=>{ cannot('delete'、'user'、{role:2})/这是关于如何使用CASL的常见误解。能力。can或React的都不

如何将条件传递给与能力对象中的条件匹配的
组件

向我的应用程序公开权限的
AbilityBuilder

AbilityBuilder.define((can, cannot) => {
  cannot('delete', 'user', { role: 2 }) // <- 2
});
AbilityBuilder.define((可以,不能)=>{

cannot('delete'、'user'、{role:2})/这是关于如何使用CASL的常见误解。
能力。can
或React的
都不支持这种行为

您需要做的是了解主题名称是什么,以及CASL如何根据传入的
能力.can
对象检测主题名称。文档中对此进行了解释:

如果文档中的信息不够,请阅读

同时检查示例应用程序(有一个指向codesanbox的链接,因此您可以快速使用它)。Todo应用程序使用类似的用例,您需要在应用程序中实现这些用例

最后,我创建了一个单独的ehancement,这样其他人将收到一条错误消息,解释错误用法并链接到文档

基本上,您需要定义自己的
subjectName
检测函数,并按如下方式传递给用户:


应该是可见的

更新
类型名称
应该是对象实例的一部分,以防止冲突(例如,当对象看起来相同或相似但类型不同时)。保持对象类型及其实例之间一致性的最简单方法是使用类。但还有其他方法,例如GraphQL有
\uuuTypeName
字段,告诉客户端从服务器接收到的对象类型


更新2:默认情况下,
能力
禁止执行任何操作,因此您的
能力生成器
不能只包含禁止的规则。您至少需要一个允许执行某些操作的规则。

只需传入它,而不使用JSX语法。如果要在组件中呈现它,请使用
React.createElement
@Andre你能举一个例子吗?我收回它。只是看了CASL的文档。我认为这是一个通用的反应问题。看起来你在尝试做一些API不是为处理而构建的。据我所知,它期望类似于对象。CASL的职责是识别一个对象,并将对象的值与定义的c进行比较条件?我错了吗?我认为lib不应该关心它是类的实例还是对象的实例,它应该以同样的方式处理。
<Can I="delete" a="user" of={{ role: 1 }}>
    <p>Should be visible</p> 
</Can>