用户登录

使用 defineAbility 或者 AbilityBuilder 定义权限,完成以后,一般这些权限就不再改动了,如果你想让应用的管理员可以通过用户界面调整用户权限,我们把需要权限信息存储在数据仓库里,然后在应用里获取到用户的权限规则数据,再把它交给 Ability。

casl.ability.ts

打开 casl.ability.ts,用 JSON 对象数据定义权限,只需要 @casl/ability 里的 Ability,去掉 AbilityBuilder。

再修改一下这个模块里默认导出的函数,去掉里面所有的东西。 先声明一个 rules,它是一个数组,假设这个 rules 数据是请求接口或者查询数据库得到的一组数据。

让这个方法 return 一个 Ability,把 rules 交给它。

然后先手工设置一下这个 rules 数据,每个规则是一个对象,在对象里面,可以用 action 设置一下动作,比如 read。再添加一个 subject,值是 Post。这个规则的意思就是用户可以读取所有 Post 类型的内容。

再添加一条规则,action 是 update,subject 是 Post,再添加一个 fields,把允许更新的字段设置成 title ,然后再添加一个 conditions,设置一下条件,它是一个对象,把 userId 设置成 user.id。

下面判断一下,如果 user.isVerfied ,执行 rules.push 添加一条规则 ,规则的 action 是 update,subject 是 Post, fields 是 status,再添加一个 conditions,一个对象,userId 等于 user.id 。

测试

在 http 客户端测试一下,发送一下这个请求,得到的响应跟之前是一样的。

用 JSON 对象定义动态权限《 CASL:权限控制 》

统计

14696
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点