Skip to content

系统权限

在管理系统中通常需要验证身份信息也就有了不同的功能权限。项目实现了基于 JWT 的身份认证,基于 RBAC 的访问控制。

权限装饰器

使用装饰器验证当前用户是否有权限访问当前的资源。

@Public()

公开:不需要认证就能进入该方法。

ts
import { Public } from '@vivy-common/security'

export class AppController {
  @Public()
  getHello() {}
}

@RequireRoles()

角色认证:必须具有指定角色标识才能进入该方法。

ts
import { Logical, RequireRoles } from '@vivy-common/security'

export class AppController {
  // 必须拥有 admin 角色才可访问
  @RequireRoles('admin')
  getHello() {}

  // 必须拥有 admin 和 common 角色才可访问
  @RequireRoles(['admin', 'common'])
  getHello() {}

  // 必须拥有 admin 或 common 角色才可访问
  @RequireRoles(['admin', 'common'], Logical.OR)
  getHello() {}
}

@RequirePermissions()

权限认证:必须具有指定权限才能进入该方法。

ts
import { Logical, RequirePermissions } from '@vivy-common/security'

export class AppController {
  // 必须拥有 system:user:add 权限才可访问
  @RequirePermissions('system:user:add')
  getHello() {}

  // 必须拥有 system:user:add 和 system:user:edit 权限才可访问
  @RequirePermissions(['system:user:add', 'system:user:edit'])
  getHello() {}

  // 必须拥有 system:user:add 或 system:user:edit 权限才可访问
  @RequirePermissions(['system:user:add', 'system:user:edit'], Logical.OR)
  getHello() {}
}

编程式验证权限

如果需要在业务逻辑中验证权限可以使用 权限验证工具类 提供的函数。

ts
import { AuthService } from '@vivy-common/security'

export class AppController {
  constructor(private authService: AuthService) {}

  getHello() {
    if (this.authService.hasRole('admin')) {
      // ...
    }
    if (this.authService.hasPermission('system:user:add')) {
      // ...
    }
  }
}

相关源码