GoWind 开源生态GoWind 开源生态
首页
GoWind Admin
GoWind CMS
GoWind IM
GoWind UBA
GoWind Toolkit
GitHub
首页
GoWind Admin
GoWind CMS
GoWind IM
GoWind UBA
GoWind Toolkit
GitHub
  • 介绍

    • GoWind Admin 产品介绍
    • GoWind Admin 安装指南
  • 后端文档

    • 后端架构总览
    • 后端核心模块详解
    • 后端 API 与 Protobuf 定义
    • 后端配置与部署
    • 后端扩展开发
  • 前端文档

    • 前端架构总览
    • 前端核心功能详解
  • 二开教程

    • 后端新增业务模块实战教程
    • 前端新增业务页面实战教程
    • 前后端联调完整实战教程
  • 高级教程

    • Lua 脚本扩展实战教程
    • 权限系统深度解析教程
    • 多租户架构实战教程
    • 任务调度与异步处理教程
    • 文件上传与对象存储教程
    • 事件总线与解耦架构教程
    • 前端主题定制与国际化教程
    • 性能优化与监控教程
    • SSE 实时推送
    • 登录策略与安全加固
    • 加密工具实战

后端核心模块详解

本文档深入剖析 GoWind Admin 后端各个核心业务模块的设计与实现,涵盖认证授权、用户管理、租户管理、权限体系、字典管理等模块。

一、认证与授权模块

认证(Authentication)和授权(Authorization)是后端安全体系的核心,GoWind Admin 在此模块做了大量设计。

1. 认证服务(AuthenticationService)

认证服务位于 internal/service/authentication_service.go,负责处理用户登录、登出、令牌刷新、验证码等核心流程。

登录流程

系统支持多种 OAuth 2.0 授权类型(Grant Type):

Grant Type说明实现状态
password用户名密码登录✅ 已实现
refresh_token刷新令牌✅ 已实现
client_credentials客户端凭据❌ 预留接口

密码登录的完整流程:

  1. 验证验证码(可选)
  2. 通过 UserCredentialRepo 验证用户凭证(用户名 + 密码)
  3. 获取用户信息,检查用户状态
  4. 解析用户权限信息(resolveUserAuthority):
    • 检查用户是否被禁用
    • 获取用户角色列表
    • 获取角色关联的权限列表
    • 验证是否拥有后台访问权限(SystemAccessBackendPermissionCode)
  5. 生成 JWT Access Token 和 Refresh Token
  6. 返回令牌信息

验证码机制

系统内置验证码生成与验证功能,支持图形验证码:

  • GenerateCaptcha:生成验证码图片(Base64 编码)
  • VerifyCaptcha:验证用户输入的验证码

令牌管理

  • Access Token:用于 API 请求认证,有效期较短
  • Refresh Token:用于刷新 Access Token,有效期较长
  • 令牌缓存通过 UserTokenCache 管理,基于 Redis 实现

2. 认证中间件

认证中间件位于 pkg/middleware/auth/,在 REST Server 中通过 Selector 中间件模式注入:

// 白名单机制:以下接口不需要认证
rpc.AddWhiteList(
    adminV1.OperationAuthenticationServiceLogin,
    adminV1.OperationAuthenticationServiceGenerateCaptcha,
    adminV1.OperationAuthenticationServiceVerifyCaptcha,
)

中间件核心功能:

  • 从请求 Header 中提取 JWT Token
  • 验证 Token 有效性
  • 解析用户信息(UserId、TenantId、Roles 等)注入到 Context
  • 支持 Ent Viewer 上下文注入,实现数据级别的隔离

3. 授权引擎

授权模块位于 pkg/authorizer/,封装了多种权限策略引擎:

引擎配置值说明
Casbincasbin轻量级权限控制,支持 ACL、RBAC 等模型
OPAopaOpen Policy Agent,强大的策略引擎
ZanzibarzanzibarGoogle Zanzibar 模型,支持 Keto 和 OpenFGA
Noopnoop空实现,不进行权限校验

通过 auth.yaml 配置切换授权引擎:

authz:
  type: "noop"  # casbin, opa, zanzibar, noop

4. 审计日志中间件

审计日志中间件位于 pkg/middleware/logging/,自动记录:

  • API 审计日志:记录每次 API 请求的详细信息
  • 登录日志:记录用户登录行为(成功/失败)

中间件通过回调函数将日志写入数据库:

applogging.Server(
    applogging.WithWriteApiLogFunc(func(ctx context.Context, data *auditV1.ApiAuditLog) error {
        return apiAuditLogRepo.Create(ctx, &auditV1.CreateApiAuditLogRequest{Data: data})
    }),
    applogging.WithWriteLoginLogFunc(func(ctx context.Context, data *auditV1.LoginAuditLog) error {
        return loginLogRepo.Create(ctx, &auditV1.CreateLoginAuditLogRequest{Data: data})
    }),
)

二、用户管理模块

1. 用户服务(UserService)

位于 internal/service/user_service.go,提供完整的用户 CRUD 管理:

核心功能:

  • 创建用户(支持多角色、多部门、设置主管)
  • 更新用户信息
  • 删除用户(支持批量)
  • 获取用户详情
  • 列表查询(支持分页、高级查询、按部门联动)
  • 禁用/启用用户
  • 设置/取消主管
  • 重置密码
  • 配置多角色
  • 配置多部门
  • 一键登录指定用户

2. 用户凭证服务(UserCredentialService)

位于 internal/service/user_credential_service.go,管理用户认证凭证:

  • 支持多种凭证类型:用户名密码、手机号、邮箱等
  • 密码加密存储
  • 凭证验证(支持密码解密验证)

3. 用户档案服务(UserProfileService)

位于 internal/service/user_profile_service.go,管理用户个人资料:

  • 查看/修改个人信息
  • 查看最后登录信息
  • 修改密码

4. 数据层

用户数据层位于 internal/data/,核心 Repo 包括:

Repo文件说明
UserRepouser_repo.go用户主表操作
UserCredentialRepouser_credential_repo.go用户凭证操作
UserRoleRepouser_role_repo.go用户-角色关联
UserOrgUnitRepouser_org_unit_repo.go用户-组织关联
UserPositionRepouser_position_repo.go用户-职位关联
UserTokenCacheuser_token_cache.go用户令牌缓存(Redis)

三、租户管理模块

租户服务(TenantService)

位于 internal/service/tenant_service.go,提供多租户管理能力:

核心功能:

  • 创建租户(自动初始化租户部门、默认角色和管理员)
  • 管理租户套餐
  • 禁用/启用租户
  • 一键登录租户管理员

租户创建流程:

  1. 创建租户记录
  2. 自动创建租户默认部门
  3. 创建租户默认角色
  4. 创建租户管理员账号
  5. 将管理员关联到角色和部门

多租户关系模型

系统支持两种租户关系模型,通过 constants.DefaultUserTenantRelationType 配置:

一对一模型(UserTenantRelationOneToOne):

  • 一个用户只属于一个租户
  • 登录时直接根据用户的 TenantId 获取权限

一对多模型(UserTenantRelationOneToMany):

  • 一个用户可以属于多个租户
  • 通过 MembershipRepo 管理多租户关系
  • 登录时需要遍历所有活跃的成员身份,合并权限

四、权限体系模块

GoWind Admin 的权限体系包含菜单权限、接口权限、数据权限三个维度。

1. 权限服务(PermissionService)

位于 internal/service/permission_service.go,管理权限点和权限分组:

  • 创建/更新/删除权限
  • 权限分组管理
  • 权限与 API 接口关联
  • 权限与菜单关联
  • 权限策略管理

2. 角色服务(RoleService)

位于 internal/service/role_service.go,管理角色和角色分组:

  • 创建/更新/删除角色
  • 角色分组管理
  • 角色关联权限
  • 角色关联用户
  • 按角色联动用户
  • 批量添加/移除员工

3. 菜单服务(MenuService)

位于 internal/service/menu_service.go,管理系统菜单:

  • 支持三种菜单类型:目录、菜单、按钮
  • 树形结构管理
  • 菜单关联权限

4. API 接口服务(ApiService)

位于 internal/service/api_service.go,管理后端 API 接口:

  • 接口注册与管理
  • 接口同步功能(从路由自动同步)
  • 接口关联权限点
  • 支持树形列表展示
  • 操作日志请求参数和响应结果配置

5. 数据权限

数据权限通过角色配置,支持以下数据范围:

数据范围说明
SELF仅本人数据
UNIT_ONLY本部门数据
UNIT_AND_CHILD本部门及下级部门数据
SELECTED_UNITS指定部门数据
ALL全部数据

数据权限优先级:ALL > SELECTED_UNITS > UNIT_AND_CHILD > UNIT_ONLY > SELF

五、组织架构模块

1. 组织管理(OrgUnitService)

位于 internal/service/org_unit_service.go,管理组织架构:

  • 树形结构组织管理
  • 支持多级组织层级
  • 组织路径自动维护

2. 部门管理

部门通过组织架构模块统一管理,支持:

  • 树形列表展示
  • 按部门联动用户
  • 部门关联角色

3. 职位管理(PositionService)

位于 internal/service/position_service.go,管理用户职务:

  • 职位作为用户的标签属性
  • 支持用户关联多个职位

六、字典管理模块

1. 字典类型服务(DictTypeService)

位于 internal/service/dict_type_service.go,管理数据字典大类:

  • 创建/更新/删除字典大类
  • 字典大类与字典条目联动

2. 字典条目服务(DictEntryService)

位于 internal/service/dict_entry_service.go,管理字典小类/条目:

  • 支持按字典大类联动
  • 服务端多列排序
  • 数据导入和导出
  • 国际化支持(DictEntryI18nRepo)

七、任务调度模块

任务服务(TaskService)

位于 internal/service/task_service.go,基于 Asynq 实现分布式任务调度:

  • 任务新增、修改、删除
  • 任务启动、暂停
  • 立即执行
  • 查看任务运行日志

Asynq Server 配置(server.yaml):

asynq:
  uri: "redis://:*Abcd123456@redis:6379/1"
  concurrency: 10
  queues:
    critical: 10
    default: 5
    low: 1

八、文件管理模块

1. 文件服务(FileService)

位于 internal/service/file_service.go,管理文件元数据:

  • 文件查询、下载、删除
  • 复制文件地址
  • 图片大图查看

2. 文件传输服务(FileTransferService)

位于 internal/service/file_transfer_service.go,处理文件上传下载:

  • 支持上传到 OSS(MinIO)或本地存储
  • 文件下载
  • 文件传输路由需要手动注册(不能使用代码生成器的 Handler)

注意:文件传输服务由于涉及 multipart form 数据处理,无法使用 Protobuf 自动生成的 Handler,需要在 rest_server.go 中手动注册路由。

九、消息管理模块

1. 站内信服务(InternalMessageService)

位于 internal/service/internal_message_service.go:

  • 发送消息给指定用户
  • 查看用户已读状态和已读时间
  • 消息详细查看、删除
  • 标为已读、全部已读

2. 消息分类服务(InternalMessageCategoryService)

位于 internal/service/internal_message_category_service.go:

  • 支持二级自定义消息分类
  • 用于消息管理时的分类选择

3. 消息接收者服务(InternalMessageRecipientService)

位于 internal/service/internal_message_recipient_service.go:

  • 管理消息接收者
  • 支持指定用户、角色、部门等多种接收范围

十、日志审计模块

1. 登录审计日志(LoginAuditLogService)

  • 记录用户登录成功和失败日志
  • 支持 IP 归属地记录

2. API 审计日志(ApiAuditLogService)

  • 记录 API 请求的详细信息
  • 通过中间件自动采集

3. 操作审计日志(OperationAuditLogService)

  • 记录用户操作日志(正常和异常)
  • 支持 IP 归属地记录
  • 查看操作日志详情

4. 数据访问审计日志(DataAccessAuditLogService)

  • 记录数据访问行为

5. 权限审计日志(PermissionAuditLogService)

  • 记录权限变更操作

6. 策略评估日志(PolicyEvaluationLogService)

  • 记录权限策略评估过程

十一、登录策略模块

登录策略服务(LoginPolicyService)

位于 internal/service/login_policy_service.go:

  • 管理登录策略规则
  • 可配置 IP 白名单/黑名单
  • 可配置时间限制
  • 可配置登录失败锁定策略

十二、语言管理模块

语言服务(LanguageService)

位于 internal/service/language_service.go:

  • 管理系统支持的语言列表
  • 国际化(i18n)基础数据
  • 与字典条目国际化联动
Edit this page
Last Updated:: 6/4/26, 11:13 PM
Contributors: Bobo
Prev
后端架构总览
Next
后端 API 与 Protobuf 定义