定义与检查权限

0
视频
0
完成
0%
进度
0
分钟
0
完成
0%
进度

CASL 提供了一套定义还有检查用户权限的方法。在项目里要使用 casl 先得安装一个包,在终端,项目所在目录的下面,执行 npm install @casl/ability 设置一个具体的版本。完成以后,回到项目。

我们先在应用里定义一下权限,新建一个文件,放在 casl 目录的下面,文件的名字是 casl.ability.ts。Ability 指的就是用户在应用能里面能干的事情。

定义权限

在文件的一开始从 @casl/ability 这个包里面,导入 defineAbility。 然后可以使用 defineAbility 定义一下用户权限,提供一个函数参数,这个函数有两个参数,一个是 can,一个是 cannot。

在这个回调里可以使用 can 还有 cannot 定义用户能做还有不能做的事情。 can 可以定义能做的事情,cannot 定义的是不能做的事情。它们都是函数。

用一下 can,它有四个参数,我们先用一下前两个参数,第一个参数值指的是一个动作,比如 read,create,update,delete,这些都是动作,动作的名字我们可以随便定义。

这里用一下 manage,这个动作在 casl 里有特别的意思,它表示所有动作。 can 的第二个参数是 Subject,也就是主题,它一般就是应用里的某种实体,比如 Article,User,Comment,这些都属于是 Subject。这个 Subject 是权限动作的承受者。这里用一下 all ,它表示的是所有的 Subject。

这个 subject 参数值可以是某一个特定的实体,或者某一种实体的类型。比如某一篇文章,或者文章这种类型。

can manage all 这条权限的意思就是,可以对应用里任何东西做任何事情。

下面再用 cannot 定义一条权限,cannot delete,User, 这条权限的意思就是,但是不能删除用户。 这两条权限合到一块的意思就是,可以对应用里的任何东西做任何事情,但是就是不能删除用户。

把这个 defineAbility 返回的东西作为这个模块默认的导出。 export default 。

检查权限

定义好应用的用户能做什么以后,可以在其它地方检查用户的权限,比如在这个 app.controller 里面,可以用一下之前定义好的权限。先在文件顶部导入 ability,来自上一级目录 casl 下面的 casl.ability。

然后在 home 这个处理器里面可以实验一下权限检查。比如可以声明一个 canReadPost,它的值就是检查权限得到的结果,用一下 ability.can,动作是 read,主题是 Post。

再试一下,声明一个 canDeleteComment,它的值用一下 ability.can,要检查的动作是 delete,主题是 Comment 。 然后再声明一个 canDeleteUser,用一下 ability.can,动作是 delete,主题是 User。

下面用 response.send ,把声明的这些东西响应给客户端。添加一个 canReadPost,一个 canDeleteComment,还有一个 canDeleteUser。

测试

然后在 http 客户端测试一下,请求地址是 localhost:3000,访问一下应用的根。 发送请求,在得到的响应数据里面,canReadPost 的值是 true, canDeleteComment 的值也是 true,canDeleteUser 的值是 false。

因为在定义权限的时候,设置的就是用户可以管理所有的主题,也就是可以对应用里的任何主题做任何事情。但是不能 delete User 这个主题,也就是不能对 User 这种主题做 delete 这个动作。

所以在检查权限的时候,得到的这个结果,canReadPost 是 true,canDeleteComment 也是 true,但是 canDeleteUser 是 false。

定义与检查权限《 CASL:权限控制 》

统计

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

社会化网络

关于

微信订阅号

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