目前由于在做 Nodejs 构架的迁移, 把原有的 typerx 的后端项目迁移到 NestJS 框架上来, 做到权限管理部分, 特和大家分享下。 项目地址:
NestJs 官方角色控制介绍
因为这篇文章主要是对权限管理部分对介绍, 所以暂定已经有了用户身份知识的了解, 若想了解用户登录相关内容, 请参阅其他相关文档。
-
Guards Guards 是一个注解式的守卫, 他描述了所修饰的控制器的访问限制是什么。他应该实现 CanActivate 这个接口。 Guards 有一个单一的职责就是决定请求是否能被路由处理。 *** 值得注意的是 Guards 处于每个 middleware 之后, 但在 interceptor 和 pipe 之前。**
-
在了解权限之前我们需要了解两个概念一个是 Authentication , 一个是 Authorization, 你没看花眼, 是的他们很像, 但是实际上是不一样的。
Authentication 与 Authorization
Authentication 主要是身份检查, 意思就像问你有没身份证(有没登录)-> 401
Authorization 主要是角色识别, 意思就像问你身份证的户口是不是本地的(角色是什么,有权限吗) -> 403。
(官方文档 Authorization guard# 和 Role-based authentication# 是不是有点反掉了呢?) auth.guard.ts
import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common';
import { Observable } from 'rxjs';
@Injectable()
export class AuthGuard implements CanActivate {
canActivate(
context: ExecutionContext,
): boolean | Promise<boolean> | Observable<boolean> {
const request = context.switchToHttp().getRequest();
return validateRequest(request);
}
}
复制代码
roles.guard.ts
import { Inject