VTJ.PRO 在线应用开发平台的核心模块(用户、认证、RBAC、缓存、设置)

0 阅读3分钟

核心模块(用户、认证、RBAC、缓存、设置)

本节深入探讨 backend/src/core 目录,该目录包含了 VTJ.PRO 平台的基础设施。这些模块处理横切关注点,例如身份管理、访问控制、持久化配置以及业务模块使用的抽象 CRUD 模式。

基础抽象(CRUD)

为确保一致性并减少样板代码,平台为控制器和服务使用了抽象基类。

  • BaseCrudService:使用 TypeORM 仓库为 createupdateremovefindByIdfindPage 操作提供标准实现。
  • BaseCrudController:暴露标准的 RESTful 端点(POST /PUT /:idDELETE /:idGET /:idPOST /page),这些端点直接映射到 BaseCrudService 的方法。

CRUD 数据流

下图展示了请求如何流经这些抽象层。

标题:基础 CRUD 架构

flowchart
    A[Client Request]
    B[BaseCrudController]
    C[BaseCrudService]
    D[TypeORM Repository]
    E[MySQL Database]
    F[UserController]
    G[UserService]

    A --> B
    B --> C
    C --> D
    D --> E
    B -- extends --> F
    C -- extends --> G

    subgraph Implementation Example
        F
        G
    end

    subgraph Code Entity Space
        A
        B
        C
        D
        E
    end

身份与访问控制(认证、用户、RBAC)

安全层分为三个主要模块:UserModuleRoleModulePermissionModule

用户与认证模块

UserModule 处理用户生命周期和认证。它支持多种登录策略:

  1. 本地登录:标准的用户名/密码认证。
  2. OAuth/静默登录:通过 AUTH_CODE 与外部提供商集成。
  3. 邮箱验证:由 EmailVerificationModule 管理,用于注册和密码重置。

RBAC(基于角色的访问控制)

访问控制通过 UsersGuard 实现,它检查有效的 JWT 令牌并验证权限。

  • PermissionModule:定义细粒度的操作(例如,user:createapp:publish)。
  • RoleModule:将权限分组为角色(例如,admindeveloper)。
  • 逻辑UsersGuard 检索用户的角色和关联权限,以验证当前请求路径/方法是否被授权。

标题:认证与授权流程

sequenceDiagram
    participant C as Client
    participant G as UsersGuard
    participant S as UserService
    participant R as Role/Permission

    C->>G: Request + JWT Token
    G->>G: validateToken()
    alt [Token Valid]
        G->>S: findById(userId)
        S-->>G: User Entity + Roles
        G->>R: Check matchPermission()
        alt [Authorized]
            G-->>C: 200 OK (Proceed to Controller)
        else [Forbidden]
            G-->>C: 403 Forbidden
        end
    else [Token Invalid]
        G-->>C: 401 Unauthorized
    end

系统配置(设置与字典)

SettingModule

管理全局系统设置,如站点名称、Logo 和注册开关。

  • 存储:设置以键值对的形式存储在数据库中。
  • 缓存SettingService 将设置缓存在内存中,以避免频繁查询数据库。

DictionaryModule

处理用于 UI 下拉菜单和常量的静态和动态数据字典。

  • DictionaryEntity:定义字典类别。
  • DictionaryItemEntity:定义类别中的具体条目。

基础设施模块(缓存与对象存储)

CacheModule

一个轻量级封装,根据环境配置使用内存缓存(使用 LRUCache)或 Redis。它被 LLMModelServiceSettingService 广泛使用。

OssModule(对象存储服务)

为文件上传提供统一接口。

  • 本地存储:将文件保存到 public/uploads 目录。
  • 阿里云 OSS:通过 ali-oss SDK 支持远程云存储。
  • 功能uploadputStreamdelete 是暴露给业务模块(如 DslModule)的主要方法,用于存储生成的项目 ZIP 文件。

模块摘要表

模块关键实体 / 类主要职责
用户UserEntity, UserService用户 CRUD、密码哈希、JWT 签发。
认证UsersGuard全局请求拦截和令牌验证。
RBACRoleEntity, PermissionEntity通过角色将用户映射到权限。
设置SettingEntity系统级配置(例如,isRegister)。
字典DictionaryEntity元数据和查找表管理。
对象存储OssService抽象的文件存储(本地 vs. 阿里云)。
缓存CacheService高性能临时数据存储。
邮件EmailVerificationService通过 SMTP 发送和验证 OTP 码。

参考资料