Skip to content

NestJS:RBAC 权限管理(实现思路) ​

模型层级 ​

常见三张核心表(命名依项目而定):

实体说明
用户(User)账号、密码哈希、基础资料
角色(Role)角色编码、名称、是否超级管理员等
权限(Permission)菜单 / 按钮 / API 标识(如 user:create)

多对多关系:用户 ↔ 角色、角色 ↔ 权限;登录后签发 JWT,载荷中带 userId 或可还原的角色 / 权限列表(过大时可只带用户 ID,每次请求再查缓存)。

NestJS 落地要点 ​

  1. 鉴权:@nestjs/passport + passport-jwt 校验 Token。
  2. 鉴权与路由绑定:全局 Guard 或控制器级 @UseGuards(JwtAuthGuard)。
  3. 授权:自定义 Guard 或装饰器(如 @Roles('admin')),读取 Handler 元数据,与用户权限比对。
  4. 注销 / 黑名单:登出将 jti / tokenId 写入 Redis 并设置 TTL,与 JWT 有效期一致;校验时查黑名单。

前端配合 ​

  • 登录后保存 Token(内存 + 持久化策略按安全等级选择)。
  • 菜单与路由由后端权限列表生成,避免前端写死超级管理员菜单。
  • 按钮级权限:指令或组件根据 permissions 判断是否渲染。

安全提示 ​

密码使用 bcrypt 等慢哈希;敏感接口务必 HTTPS;权限字符串需防枚举与越权(服务端最终以数据库为准)。