用户登录

应用允许管理员用户可以做任何事情,用户可以阅读内容,但是内容的状态字段的值必须是 published,也就是用户可以阅读已经发布的内容。内容的作者可以阅读,更新,删除他自己发布的内容。在应用里我们可以用 CASL 这个包提供的功能,描述一下应用的用户对指定的资源能去做些什么。

先给项目安装一个包,在终端,项目所在目录的下面,执行 npm install @casl/ability。再给项目生成一个 Provider ,执行 nest generate provider ,名字是 AppAbilityFactory ,放在 app/modules/access-control/providers 里面,加上 --flat 选项。

定义动作

回到项目,打开 AppAbilityFactory,我们可以在这里描述一下用户能做些什么。先 export 一个 enum,名字是 Action,在它里面添加一些动作,比如 manage 表示管理,对应的值是 manage,再添加一个 create,值是 create ,然后是 read,值是 read,再添加一个 update 表示更新,值是 update,最后再添加一个 delete,值是 delete ,这些动作我们可以自己随便定义。这里这个 manage 在 CASL 里面有特别的意思,它表示所有动作。

主题

下面再 export 一个类型,名字是 Subjects ,它可以表示要验证权限的主题的类型,这里用一个 InferSubjects,类型可以是 typeof PostEntity,或者 typeof UserEntity ,这样这个 Subjects 可以是 PostEntity 或者 UserEntity 这种类型,也可以是它们的一个实例,除了这些,Subjects 还可以是 'all',在 CASL 这里, 'all' 表示所有主题。

能力

然后再 export 一个类型,名字可以是 AppAbility,等于一个 Ability,再设置一下这个 Ability 类型的参数,一个是能做的动作,这里就是上面定义的 Action,然后是验证的主题,这里就是上面定义的这个 Subjects。

这个 AppAbility 描述的就是用户能做的动作,以及对哪些类型的主题可以做这些动作。

用 CASL 描述用户权限:定义动作与主题类型《 Nest.js 企业级后端实践:权限控制 》

统计

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

社会化网络

关于

微信订阅号

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