用户登录

打开 casl.ability,在这里定义一下用户可以读取所有 Post 类型的内容的权限,这条权限可以用一下 can,动作设置成 read,主题设置成 Post。

然后打开 app.controller.ts ,在这个 home 处理器方法里面,检查一下用户是不是可以读取 Post 这种类型的内容。 先清理一下,只留下这个 canReadPost。

在上面再定义一个 post,让它等于一个对象,里面添加一个 id 属性,随便设置一个值。

检查权限的时候,用一下 ability.can,动作是 read,主题是上面定义的这个 post 。 然后可以在上面再定义一个 postType,它的值是 post.constructor.name。

在响应的数据里面,再添加一个 postType。

在 http 客户端测试一下,发送一下这个请求,得到响应里面 canReadPost 是 false。 因为 casl 在检查权限的时候,会根据主题对象的 constructor.name 的值来判断主题的类型。现在这个主题的类型是 Object,并不是 Post,所以这个 canReadPost 会是 false。

在项目里新建一个文件,放在 post 里面,名字是 post.model.ts。 在这个文件里导出一个类,名字是 Post,在它里面添加一个 id ,类型是 number,再添加一个 userId,表示内容作者的 id,类型是 number,再添加一个 title,类型是 string。

回到 post.controller,修改一下 post 的值,可以新建一个 Post。

再到 http 客户端测试一下,发送一下这个请求,得到的响应里面, canReadPost 会是 true,因为检查的主题的类型现在是 Post。 定义权限的时候,允许用户 read 所有 Post 类型的内容,所以这个 canReadPost 它的值会是 true。

理解权限的主题类型《 CASL:权限控制 》

统计

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

社会化网络

关于

微信订阅号

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