用户登录

继续编辑 DemoRoles 这个守卫,现在我们已经得到了在处理器方法上附加的 roles 数据,下面再判断一下,如果没有 roles,可以让这个方法 return true,就是放行请求。

下面再添加一个 request, 用一下 context.switchToHttp,接着再调用 getRequest 方法得到请求,然后可以从请求里面,把 user 解构出来。

再添加一个 hasRole, 它是一个函数, 用一下 user.roles,请求里这个 user 属性是在演示中间件里添加的, 它是一个数组,用一下数组的 some 方法, 给它一个回调,迭代一下 roles,当前项目叫 role, 返回的是 roles.includes, 看看有没有 role。

这个 hasRole 的作用就是,检查当前请求的用户里的用户角色,看看用户有没有在请求处理器上规定的用户角色。

下面 return 的东西, 先用 user,&& user.roles, && hasRole, 满足这三个条件,方法才会 return ture, 不然就 return false。

在客户端, 配置一个请求,用 POST 方法请求 posts 地址, 请求里添加一个 x-demo 头部信息,值要设置成 secret,这样在演示中间件里就会在请求的上面添加一个 user 属性,这个 user 属性的 roles 里面就包含一个 member。

在这个请求的处理器上设置了要求的用户角色必须是 member , DemoRoles 守卫会检查请求里的用户的用户角色,看一下有没有处理器上要求的用户角色,如果有,就放行。

取消请求里的这个 x-demo 头部信息,再发送一下这个请求, 这回请求里的 user 属性里的 roles 里面,就不会包含 member 角色, 这样 DemoRoles 守卫里的 canActivate 方法返回了 false, throw 了一个 ForbiddenException 异常,客户端得到了一个 403 的响应。

守卫(按用户角色放行)《 Nest.js 应用框架:核心部件(2) 》

统计

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

社会化网络

关于

微信订阅号

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