之前我们演示 casl 定义权限的时候,用的是 defineAbility 这个函数,用这种方法定义权限比较简单,不过会有一些限制。 casl 还提供了一种定义权限的方法,就是使用 AbilityBuilder 这个类。
casl.ability.ts
打开 casl.ability.ts ,在这个文件里可以从 @casl/ability 里面,导入 AbilityBuilder,还有 Ability。
然后剪切一下之前用 defineAbility 定义的权限,再去掉其它的东西,默认导出的是一个函数,函数支持一个 user 参数,在这个函数里面,可以新建一个 AbilityBuilder 实例,把 Ability 交给它。然后可以解构一下这个实例,需要的是 can,cannot 还有 build。
再把之前剪切的权限粘贴到这里。然后可以让这个函数 return 执行 build() 得到的结果。
测试
在 http 客户端,再测试一下,发送一下这个请求,得到的结果是一样的。