用户登录

在 Can 这个 Trait 里面,再添加一个可以判断是否拥有指定权限的方法 .. 方法的名字就是 can .. 它接收一个 permissions 参数 .. 这个 permissions 可以是一个权限,也可以是一组权限 ..

如果是一组权限的话,可以再判断一下用户拥有所有这组权限,还是拥有这种权限里的某一个权限 .. 这里可以再给 can 添加一个 all 参数,默认让它等于 true .. 使用这个方法的时候,如果把 all 设置成 false .. 意思就是用户只需要拥有指定的一组权限里的某一个权限就行 ..

方法里面,添加一个 userPermissions .. 它的值可以是 await 用一下模型上的 getPermissions 方法 ..

如果 permissions 参数是一个权限的话,它的值应该是个字符串 .. 我们可以直接 return .. 用一下 userPermissions 数组的 includes 方法,判断这个数组里有没有 permissions .. 如果数组里包含这个项目就会返回 true,也就说明用户拥有指定的权限 ..

这个 permissions 还可以是个数组 .. 上面可以判断一下 .. 如果 Array.isArray .. 判断一下 permissions 是不是一个数组 .. 如果是 ..

先添加一个 result .. 迭代一下 permissions .. 用一下 map 方法,当前项目叫 permission .. return 的是 userPermissions.includes .. permission ..

这样这个 result 是个判断的结果数组 .. 里面会包含一些 true 或者 false ..

return 的东西可以判断一下 all .. 如果 all 是 true 的话,说明用户需要拥有所有指定的权限才能返回 true .. 这个结果就是 !result.includes(false) .. 判断的结果里面如果包含一个 false, 会返回 true,我们最终要返回的结果应该是跟这个判断结果相反的值,所以前面要加上一个 ! 号 ..

如果 all 的值是 false ,我们返回的结果就是用一下 result.includes .. true ,也就是所有要判断的权限里面,用户只需要拥有其中的一个权限,can 这个方法就会返回 true ..

下面再找个地方可以试一下这个 can 方法 ..

在这个 demo/acl 路由里面 .. 添加一个 result .. await 用一下 .. user 上的 can ,判断一下这个用户有没有 create post 权限 ..

return 这个 result ..

再到浏览器上预览一下 .. 返回的是 true ... 说明用户拥有指定的这个权限 ..

再回来判断一组权限 .. can 方法支持一个数组类型的参数 .. create post .. read post ..

返回的是 true ,说明用户同时拥有 create post 还有 read post 权限 ..

这次再添加一个权限 .. update post ...

然后再预览一下 ..

这回返回的是 false .. 因为这个用户没有 update post 权限 ..

我们可以再试一下,看看 id 号是 1 的这个用户有没有这些权限 ..

返回的结果是 true,说明 id 号是 1 的用户拥有所有要判断的权限 ...

判断用户是否拥有指定权限(can)《 Node.js 应用:权限控制 》

统计

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

社会化网络

关于

微信订阅号

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