logo
0
0
WeChat Login

MLiev IAM - 企业级身份认证与访问管理系统

项目介绍

MLiev IAM 是一个基于 Go 语言开发的现代化企业级身份认证与访问管理(IAM)系统,集成了单点登录(SSO)功能。该系统采用分层架构设计,提供高性能、高可用、易扩展的身份认证和授权服务。

核心特性

  • 🔐 身份认证管理 - 多种认证方式支持,包括用户名密码、OAuth2.0、OIDC等
  • 🛡️ 访问控制 - 基于角色的访问控制(RBAC)和基于属性的访问控制(ABAC)
  • 🔗 单点登录 - 统一登录入口,支持多应用系统无缝切换
  • 👥 用户管理 - 完整的用户生命周期管理,包括注册、激活、禁用等
  • 🏢 组织架构 - 支持多层级组织架构和部门管理
  • 📊 审计日志 - 完整的操作审计和安全日志记录
  • 🔧 API优先 - RESTful API设计,易于集成和扩展
  • 🔄 配置热重载 - 支持通过信号或API重新加载配置,无需重启进程

技术栈

  • 编程语言: Go 1.25+
  • Web框架: Gin
  • 数据库: MySQL/PostgreSQL/SQLite
  • ORM: GORM v1.31.0(支持软删除、钩子函数、关联关系)
  • 缓存: Redis
  • 配置管理: Viper
  • 日志: Zap
  • 认证协议: JWT、OAuth2.0、OIDC
  • 容器化: Docker
  • 依赖注入: 自研轻量级DI框架
  • 数据验证: Go Validator(内置结构体验证)
  • 数据模型: 完整的RBAC权限模型设计

架构特点

  • 分层架构: 采用 Controller-Service-DAO 分层设计,职责清晰
  • RBAC权限模型: 完整的基于角色的访问控制,支持层级权限和数据权限隔离
  • 依赖注入: 基于接口的依赖注入,提高代码可测试性和可维护性
  • ORM集成: GORM软删除、钩子函数、关联关系自动管理
  • 数据模型: 支持JSON扩展字段、枚举类型、状态管理
  • 中间件支持: 丰富的中间件生态,支持认证、授权、日志、限流等
  • 配置化: 支持多环境配置,易于部署和运维
  • 健康检查: 内置健康检查机制,支持微服务架构
  • 静态资源: 内嵌静态资源,单文件部署

功能清单

🎯 核心功能

用户管理

  • 用户数据模型设计(包含基础信息、认证信息、状态管理)
  • 用户状态枚举(未激活/激活/禁用/锁定)
  • 用户多属性管理(JSON扩展字段)
  • 用户-部门关联设计
  • 用户注册与激活接口
  • 用户信息管理(增删改查)接口
  • 密码策略配置
  • 批量用户导入/导出

身份认证

  • 用户名密码认证
  • 手机号/邮箱验证码登录
  • OAuth2.0 第三方登录
  • OIDC 协议支持
  • 多因子认证(MFA)
  • 登录设备管理
  • 会话管理

权限管理

  • 角色数据模型设计(支持层级结构和数据权限范围)
  • 权限资源模型设计(菜单/按钮/API/数据权限)
  • 基于角色的访问控制(RBAC)模型设计
  • 角色权限关联表设计(支持权限约束和时效管理)
  • 用户角色关联表设计(支持审批流程和范围控制)
  • 权限继承机制设计(层级路径自动计算)
  • 角色管理接口开发
  • 权限管理接口开发
  • 基于属性的访问控制(ABAC)
  • 动态权限验证接口

组织架构

  • 部门数据模型设计(支持多层级组织架构)
  • 部门类型定义(公司/事业部/部门/团队)
  • 用户-部门关联设计
  • 组织层级权限模型(层级路径自动维护)
  • 数据权限隔离设计(全部/本部门/本部门及下级/仅本人)
  • 部门管理接口开发
  • 组织架构树形接口
  • 部门负责人管理

单点登录(SSO)

  • 统一认证中心
  • 应用系统注册管理
  • 跨域认证支持
  • 退出登录同步
  • 令牌管理

🔧 系统功能

安全特性

  • 密码加密存储设计(密码哈希、盐值)
  • 登录失败限制设计(失败计数、账户锁定)
  • 用户状态安全控制(激活/禁用/锁定状态)
  • 数据权限隔离设计(部门级、个人级权限)
  • 软删除数据保护
  • 会话超时控制
  • IP白名单/黑名单
  • 操作日志审计接口
  • 安全事件告警

系统管理

  • 健康检查接口
  • 数据模型设计完成(用户、角色、权限、部门等)
  • 数据库表结构设计(支持GORM自动迁移)
  • 系统配置管理接口
  • 字典数据管理
  • 系统监控
  • 性能指标
  • 日志管理

API 接口

  • RESTful API 设计
  • API 文档自动生成
  • API 限流控制
  • API 版本管理
  • Webhook 支持

📊 数据统计

  • 用户登录统计
  • 权限使用分析
  • 系统访问报表
  • 安全事件统计
  • 性能监控数据

🚀 扩展功能

  • 插件机制
  • 自定义认证流程
  • 多租户支持
  • 国际化支持
  • 主题定制
  • 移动端适配

快速开始

环境要求

  • Go 1.25+
  • MySQL 8.0+ / PostgreSQL 13+ / SQLite 3+
  • Redis 6.0+

安装部署

  1. 克隆项目
git clone <repository-url> cd mliev-iam
  1. 配置环境
cp config.yaml.example config.yaml # 编辑 config.yaml 配置数据库和Redis连接
  1. 安装依赖
go mod download
  1. 运行项目
go run main.go
  1. Docker 部署
docker build -t mliev-iam . docker run -p 8080:8080 mliev-iam

配置重载

系统支持在运行时重新加载配置,无需重启进程:

方法一:使用系统信号

# 发送 SIGHUP 信号触发重载 kill -HUP <PID> # 或使用脚本 ./scripts/reload-config.sh signal

方法二:使用 API 接口

# 需要管理员权限 curl -X POST http://localhost:8080/api/admin/system/reload \ -H "Authorization: Bearer <access_token>" # 或使用脚本 ./scripts/reload-config.sh api

详细说明请参考:配置重载指南

API 文档

启动服务后,访问以下端点:

  • 健康检查: GET /health
  • 简单健康检查: GET /health/simple
  • 首页: GET /
  • 系统信息: GET /api/admin/system/info
  • 配置重载: POST /api/admin/system/reload

数据模型设计

系统采用完整的RBAC权限控制模型,包含以下核心数据模型:

📊 核心模型关系图

用户(User) ←→ 用户角色(UserRole) ←→ 角色(Role) ←→ 角色权限(RolePermission) ←→ 权限(Permission) ↓ ↓ ↓ 部门(Department) 层级结构 资源控制

🗃️ 数据模型详细设计

用户模型 (User)

  • 基础信息: 用户名、邮箱、手机、昵称、真实姓名、头像
  • 认证安全: 密码哈希、盐值、密码过期时间
  • 状态管理: 用户状态(未激活/激活/禁用/锁定)、登录统计
  • 扩展属性: JSON格式扩展字段,支持自定义用户属性

角色模型 (Role)

  • 角色类型: 系统角色/自定义角色
  • 层级结构: 支持父子角色关系,自动路径计算
  • 数据权限: 支持4级数据权限范围控制
  • 状态管理: 角色启用/禁用状态

权限模型 (Permission)

  • 权限类型: 菜单权限/按钮权限/API权限/数据权限
  • 资源定义: 支持资源标识符、HTTP方法、URL路径
  • 层级结构: 权限树形结构,支持权限继承
  • 前端集成: 组件路径、图标、重定向等前端特性

部门模型 (Department)

  • 组织类型: 公司/事业部/部门/团队
  • 层级管理: 自动维护父子关系和叶子节点
  • 组织信息: 负责人、联系方式、成本中心等
  • 数据权限: 部门级数据权限隔离

关联关系模型

  • 用户角色关联 (UserRole): 支持审批流程、范围控制、时效管理
  • 角色权限关联 (RolePermission): 支持权限约束、条件匹配

🔐 权限控制特性

  • 多级数据权限: 全部数据/本部门/本部门及下级/仅本人
  • 权限继承: 基于层级路径的权限继承机制
  • 时效控制: 支持角色和权限的有效期管理
  • 审批流程: 用户角色分配支持审批机制
  • 条件约束: 支持基于条件的权限验证

📁 模型文件概览

模型文件说明核心特性
user.go用户模型状态管理、多属性、认证安全、部门关联
role.go角色模型层级结构、数据权限范围、系统/自定义角色
permission.go权限模型多类型权限、资源控制、层级继承、前端集成
department.go部门模型组织架构、层级管理、负责人、成本中心
user_role.go用户角色关联审批流程、范围控制、时效管理、主要角色
role_permission.go角色权限关联权限约束、条件匹配、RBAC实现

所有模型均支持:

  • ✅ GORM ORM 集成
  • ✅ 软删除保护
  • ✅ 自动时间戳
  • ✅ JSON扩展字段
  • ✅ 数据验证标签
  • ✅ 业务方法封装

开发指南

项目遵循严格的代码规范和最佳实践,详细的开发规范请参考 项目开发规范文档

项目结构

mliev-iam/ ├── app/ # 应用核心代码 │ ├── controller/ # 控制器层 │ ├── service/ # 服务层 │ ├── dao/ # 数据访问层 │ ├── model/ # 数据模型 │ │ ├── user.go # 用户模型(支持状态管理、多属性) │ │ ├── role.go # 角色模型(支持层级结构、数据权限) │ │ ├── permission.go # 权限模型(菜单/按钮/API/数据权限) │ │ ├── department.go # 部门模型(组织架构、层级管理) │ │ ├── user_role.go # 用户角色关联(审批流程、范围控制) │ │ └── role_permission.go # 角色权限关联(约束条件、时效管理) │ ├── dto/ # 数据传输对象 │ └── middleware/ # 中间件 ├── config/ # 配置管理 │ └── autoload/ # 自动加载配置 ├── internal/ # 内部包 │ ├── interfaces/ # 接口定义 │ └── pkg/ # 基础包 ├── static/ # 静态资源 ├── templates/ # 模板文件 └── _docs/ # 项目文档 ├── PROJECT_SPECIFICATION.md # 开发规范 └── TEMPLATE_INIT.md # 模板初始化

贡献指南

我们欢迎社区贡献!请阅读贡献指南并遵循以下步骤:

  1. Fork 项目
  2. 创建功能分支
  3. 提交代码变更
  4. 创建 Pull Request

许可证

本项目采用 MIT License

联系我们

如有问题或建议,请通过以下方式联系:

  • 提交 Issue
  • 发送邮件至项目维护者
  • 加入我们的开发者社区

© 2025 MLiev IAM. All rights reserved.

About

MLiev IAM 是一个基于 Go 语言开发的现代化企业级身份认证与访问管理(IAM)系统,集成了单点登录(SSO)功能。该系统采用分层架构设计,提供高性能、高可用、易扩展的身份认证和授权服务。

4.47 MiB
0 forks0 stars3 branches2 TagREADMEMIT license
Language
Go79.6%
CSS15.2%
HTML2.9%
Shell0.8%
Others1.5%