SSO项目实体建模报告

MaxKey 项目实体建模报告

1. 项目概述

MaxKey 是一个开源的身份和访问管理 (IAM) 系统,提供单点登录 (SSO)、多因素认证、权限管理等核心功能。本报告对 MaxKey 项目的核心实体进行建模分析,旨在帮助理解系统的数据结构和实体关系。

2. 实体识别

通过分析 MaxKey 项目的代码结构,识别出以下核心实体:

实体名称 描述 所在文件
UserInfo 用户信息实体 maxkey-entity/src/main/java/org/dromara/maxkey/entity/idm/UserInfo.java
Apps 应用实体 maxkey-entity/src/main/java/org/dromara/maxkey/entity/apps/Apps.java
Roles 角色实体 maxkey-entity/src/main/java/org/dromara/maxkey/entity/permissions/Roles.java
Groups 用户组实体 maxkey-entity/src/main/java/org/dromara/maxkey/entity/idm/Groups.java
GroupMember 用户组-用户关联实体 maxkey-entity/src/main/java/org/dromara/maxkey/entity/idm/GroupMember.java
Organizations 组织实体 maxkey-entity/src/main/java/org/dromara/maxkey/entity/idm/Organizations.java
HistoryLogin 登录历史实体 maxkey-entity/src/main/java/org/dromara/maxkey/entity/history/HistoryLogin.java
CnfPasswordPolicy 密码策略实体 maxkey-entity/src/main/java/org/dromara/maxkey/entity/cnf/CnfPasswordPolicy.java

3. 实体属性和数据类型

3.1 UserInfo(用户信息实体)

属性名称 数据类型 描述
id String 用户ID
username String 用户名
password String 密码(加密)
displayName String 显示名称
email String 邮箱
mobile String 手机号码
authnType int 认证类型
status int 用户状态
department String 部门
organization String 组织
lastLoginTime Date 最后登录时间
lastLoginIp String 最后登录IP
isLocked int 是否锁定
badPasswordCount int 密码错误次数
passwordLastSetTime Date 密码最后设置时间

3.2 Apps(应用实体)

属性名称 数据类型 描述
id String 应用ID
appName String 应用名称
loginUrl String 登录URL
category String 应用分类
protocol String 认证协议
secret String 应用密钥
visible int 可见性
credential String 凭证类型
sharedUsername String 共享用户名
sharedPassword String 共享密码
status int 应用状态

3.3 Roles(角色实体)

属性名称 数据类型 描述
id String 角色ID
roleCode String 角色编码
roleName String 角色名称
category String 角色分类
isdefault int 是否默认角色
status int 角色状态
appId String 关联应用ID

3.4 Groups(用户组实体)

属性名称 数据类型 描述
id String 组ID
groupCode String 组编码
groupName String 组名称
category String 组分类
isdefault int 是否默认组
status int 组状态

3.5 GroupMember(用户组-用户关联实体)

属性名称 数据类型 描述
id String 关联ID
groupId String 用户组ID
memberId String 成员ID(用户ID)
type String 成员类型(User或Group)

4. 实体关系

4.1 核心关系

关系类型 实体1 实体2 描述
多对多 UserInfo Groups 用户可以属于多个用户组,用户组可以包含多个用户
多对多 Groups Apps 用户组可以访问多个应用,应用可以被多个用户组访问
多对多 UserInfo Apps 用户可以访问多个应用,应用可以被多个用户访问
多对多 Groups Roles 用户组可以拥有多个角色,角色可以被多个用户组拥有
多对多 Roles Apps 角色可以访问多个应用,应用可以被多个角色访问
一对多 Organizations UserInfo 组织可以包含多个用户,用户属于一个组织
一对多 UserInfo HistoryLogin 用户可以有多个登录历史,登录历史属于一个用户
一对一 UserInfo CnfPasswordPolicy 用户可以有一个密码策略,密码策略适用于多个用户

4.2 关系实现

  • UserInfo 与 Groups:通过 GroupMember 实体实现多对多关系
  • Groups 与 Apps:通过 Access 实体实现多对多关系
  • UserInfo 与 Apps:通过 UserApps 实体实现多对多关系
  • Groups 与 Roles:通过 RoleMember 实体实现多对多关系
  • Roles 与 Apps:通过 PermissionRole 实体实现多对多关系

5. 实体关系图

belongs_to
contains
has
accessed_by
uses
used_by
has
assigned_to
has
accessed_by
contains
has
follows
UserInfo
GroupMember
Groups
Access
Apps
UserApps
RoleMember
Roles
PermissionRole
Organizations
HistoryLogin
CnfPasswordPolicy

6. 实体建模总结

6.1 实体设计特点

  1. 模块化设计:实体类按照功能模块进行组织,如用户管理、应用管理、权限管理等。
  2. 关系清晰:通过中间实体实现多对多关系,如 GroupMember、Access、UserApps 等。
  3. 属性丰富:实体类包含了丰富的属性,满足各种业务场景的需求。
  4. 继承关系:部分实体类继承自基础实体类,如 UserInfo 继承自 JpaEntity。
  5. 枚举常量:使用内部类定义枚举常量,如 UserInfo 中的 ONLINE、GENDER、AUTHNTYPE 等。

6.2 实体设计优势

  1. 灵活性:通过多对多关系,实现了用户、用户组、角色、应用之间的灵活关联。
  2. 可扩展性:实体类设计考虑了未来的扩展需求,如通过 extendAttr 属性支持自定义属性。
  3. 安全性:密码等敏感信息通过加密存储,确保数据安全。
  4. 可维护性:实体类结构清晰,便于维护和修改。

7. 优化建议

7.1 实体设计优化

  1. 属性冗余:UserInfo 实体包含大量属性,部分属性可能使用频率较低,可以考虑将一些不常用的属性移至扩展表中。
  2. 关系简化:部分多对多关系可以考虑使用更简单的实现方式,如使用 JSON 字段存储关联 ID 列表,减少中间表的数量。
  3. 索引优化:为常用查询字段添加索引,如 UserInfo 的 username、email、mobile 等字段。
  4. 数据类型优化:对于一些状态字段,可以考虑使用枚举类型替代整数类型,提高代码可读性。

7.2 性能优化

  1. 缓存策略:对常用实体数据进行缓存,减少数据库查询次数。
  2. 懒加载:对于关联实体,使用懒加载策略,避免不必要的查询。
  3. 批量操作:支持批量创建、更新、删除实体,提高操作效率。
  4. 分页查询:对于大量数据的查询,使用分页查询,减少内存占用。

7.3 安全性优化

  1. 敏感数据保护:加强对密码、密钥等敏感数据的加密存储和传输。
  2. 数据访问控制:实现细粒度的数据访问控制,确保用户只能访问授权的数据。
  3. 审计日志:记录实体的创建、修改、删除操作,便于审计和追溯。

8. 结论

MaxKey 项目的实体设计合理、结构清晰,能够满足身份和访问管理系统的需求。通过本次实体建模分析,我们对系统的数据结构和实体关系有了更清晰的理解,为系统的优化和扩展提供了参考。

实体建模不仅有助于理解现有系统,也为系统的未来发展提供了基础。通过不断优化实体设计,可以提高系统的性能、安全性和可维护性,使 MaxKey 成为更加强大和可靠的身份和访问管理解决方案。

相关推荐
赢乐2 年前
Node.js单点登录SSO详解:Session、JWT、CORS让登录更简单
中间件·node.js·express·jwt·session·cors·单点登录sso