用户登录

自由学三年,把想法变成现实。33 折优惠(最后 6 天), 现在订阅 →

先想一个问题,刚才我们一块儿创建了一个 demoRoles 守卫,假设它的作用就是根据用户的角色,决定是否放行请求。

不同的处理器方法或者控制器类可能需要限制不同的用户角色使用, 我们需要一种方法可以更灵活的使用 demoRoles 这个守卫,可以通过 Reflection,就是反射这种方法。

在控制器类或者方法的上面,使用 @SetMetadata 这个装饰器附加一些数据, 然后在守卫里面,可以得到设置的这些数据。

比如在这个 posts.controller 的 store 方法上面,用一下 @SetMetadata ,附加一个数据,第一个参数是数据的名字,可以是 roles, 第二个参数是具体的值, 一个数组.. 里面添加一个 member。

然后回到 demoRoles 这个守卫, 这里我们可以借助一个 Reflector 帮手方法获取到在类或者方法上附加的数据。

这个东西要作为这个守卫类的依赖注入进来, 在类里面,添加一个 constructor, private readonly reflector, 类型是 Reflector。

在这个 canActivate 方法里面,添加一个 roles, 它的值可以使用 this.reflector 上的 get 方法得到在处理器上附加的 roles 数据,返回的值是一组 string,要得到的数据是 roles, 数据附加到的地方是 context.getHandler(), 就是处理器方法。

下面在控制台上输出获取到的 roles。

回到客户端,用 POST 方法请求 posts 地址, 再去检查一下控制台上输出的东西。

这里输出了一个数组里面有个 member,这个数据就是在 store 这个处理器方法的上面,使用 @SetMetadata 装饰器附加的东西。

反射(Reflection)《 Nest.js 应用框架:核心部件(2) 》

统计

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

社会化网络

关于

微信订阅号

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