跳到主要内容

邮轮穿舱件管理系统 - 用户权限模型文档

文档概述

本文档详细分析了邮轮穿舱件管理系统后台的用户、角色和权限相关数据模型定义。通过深入分析代码结构,提供了完整的类图、数据流图和系统架构可视化,帮助开发人员理解系统的用户权限管理机制。

参考源文件:

1. 核心数据模型

1.1 用户模型 (User Model)

用户模型是系统的核心实体,负责存储用户的基本信息和状态。

class User(Model):
id = fields.IntField(primary_key=True)
username = fields.CharField(max_length=255, description="用户名", unique=True, null=False)
password = fields.CharField(max_length=511, description="密码", null=False)
email = fields.CharField(max_length=255, description="邮箱", unique=True, null=True)
sms = fields.CharField(max_length=255, description="手机号码", null=True)
status = fields.CharField(max_length=255, description="用户状态", null=False, default=UserStatus.ACTIVE.value)
openid = fields.CharField(max_length=255, description="微信OpenID", null=True)
is_system = fields.BooleanField(description="是否系统用户", null=False, default=False)
created_by = fields.IntField(description="创建人", null=True, default=-1)
updated_by = fields.IntField(description="更新人", null=True, default=-1)
created_at = fields.DatetimeField(description="创建时间", null=False, auto_now_add=True)
updated_at = fields.DatetimeField(description="更新时间", null=False, auto_now=True)

用户状态枚举定义:

class UserStatus(Enum):
ACTIVE = "active" # 活跃状态
INACTIVE = "inactive" # 非活跃状态
SUSPENDED = "suspended" # 暂停状态
DELETED = "deleted" # 删除状态

1.2 角色模型 (Role Model)

角色模型采用基于用户的权限分配模式,每个用户对应一个角色记录。

class Role(Model):
user_id = fields.IntField(description="用户ID", null=False)
scope_list = fields.CharField(max_length=255, description="权限列表", null=True, default="")
scope_group = fields.CharField(max_length=255, description="权限组", null=True, default="")
created_by = fields.IntField(description="创建人", null=True, default=-1)
updated_by = fields.IntField(description="更新人", null=True, default=-1)
created_at = fields.DatetimeField(description="创建时间", null=False, auto_now_add=True)
updated_at = fields.DatetimeField(description="更新时间", null=False, auto_now=True)

2. 数据模式定义

2.1 用户数据模式

系统使用Pydantic模式进行数据验证和序列化:

用户输入模式 (UserSchemaIn):

class UserSchemaIn(BaseModel):
username: str
password: str
email: Optional[str] = None
sms: Optional[str] = None
status: Optional[UserStatus] = UserStatus.ACTIVE
openid: Optional[str] = None
is_system: Optional[bool] = False

用户输出模式 (UserSchemaOut):

class UserSchemaOut(BaseModel):
id: int
username: str
email: Optional[str] = None
sms: Optional[str] = None
status: str
openid: Optional[str] = None
is_system: bool
created_by: Optional[int] = None
updated_by: Optional[int] = None
created_at: datetime
updated_at: datetime

2.2 角色数据模式

角色输入模式 (RoleSchemaIn):

class RoleSchemaIn(BaseModel):
user_id: int
scope_list: Optional[str] = ""
created_by: Optional[int] = -1

权限管理相关模式:

class ScopeGrantSchema(BaseModel):
user_id: int
scope_name: str

class UserScopesSchema(BaseModel):
user_id: int
scopes: List[str]

3. 类关系图

classDiagram
class User {
+id: int
+username: str
+password: str
+email: str
+sms: str
+status: str
+openid: str
+is_system: bool
+created_by: int
+updated_by: int
+created_at: datetime
+updated_at: datetime
}

class Role {
+user_id: int
+scope_list: str
+scope_group: str
+created_by: int
+updated_by: int
+created_at: datetime
+updated_at: datetime
}

class UserSchemaIn {
+username: str
+password: str
+email: Optional[str]
+sms: Optional[str]
+status: Optional[UserStatus]
+openid: Optional[str]
+is_system: Optional[bool]
}

class UserSchemaOut {
+id: int
+username: str
+email: Optional[str]
+sms: Optional[str]
+status: str
+openid: Optional[str]
+is_system: bool
+created_by: Optional[int]
+updated_by: Optional[int]
+created_at: datetime
+updated_at: datetime
}

User "1" -- "1" Role : has
UserSchemaIn ..> User : creates
UserSchemaOut <.. User : represents

4. 服务层架构

4.1 用户服务 (User Service)

用户服务提供完整的用户管理功能,包括创建、查询、更新、删除和认证。

核心功能方法:

  • service_create_user() - 创建新用户
  • service_get_user_by_id() - 根据ID获取用户
  • service_get_user_by_username() - 根据用户名获取用户
  • service_get_user_by_openid() - 根据微信OpenID获取用户
  • service_update_user() - 更新用户信息
  • service_delete_user() - 删除用户
  • service_authenticate_user() - 用户认证
  • service_change_user_status() - 更改用户状态

密码安全处理:

def service_util_hash_password(password: str) -> str:
salt = bcrypt.gensalt()
hashed = bcrypt.hashpw(password.encode('utf-8'), salt)
return hashed.decode('utf-8')

def service_util_verify_password(password: str, hashed_password: str) -> bool:
return bcrypt.checkpw(password.encode('utf-8'), hashed_password.encode('utf-8'))

4.2 角色服务 (Role Service)

角色服务负责权限的授予、撤销和查询。

核心功能方法:

  • service_get_user_scopes() - 获取用户权限列表
  • service_grant_user_a_scope() - 授予用户权限
  • service_revoke_user_a_scope() - 撤销用户权限

5. 数据流图

flowchart TD
A[用户请求] --> B[数据验证]
B --> C{验证结果}
C -->|成功| D[业务处理]
C -->|失败| E[返回错误]
D --> F[数据库操作]
F --> G[返回结果]
E --> G

subgraph 用户管理流程
H[创建用户] --> I[密码哈希]
I --> J[保存用户]
J --> K[返回用户信息]
end

subgraph 权限管理流程
L[权限请求] --> M[查询角色]
M --> N[权限验证]
N --> O[执行操作]
end

A --> H
A --> L

6. 权限管理架构

6.1 权限分配模式

系统采用基于字符串列表的权限管理方式:

# 权限列表格式:逗号分隔的权限名称
scope_list = "read,write,delete,admin"

6.2 权限验证流程

sequenceDiagram
participant Client
participant Router
participant Service
participant Model
participant Database

Client->>Router: 请求带权限的操作
Router->>Service: 调用权限验证
Service->>Model: 查询用户角色
Model->>Database: 执行查询
Database-->>Model: 返回角色数据
Model-->>Service: 返回权限列表
Service->>Service: 验证权限
alt 权限验证通过
Service->>Router: 返回成功
Router->>Client: 执行操作
else 权限验证失败
Service->>Router: 返回权限错误
Router->>Client: 返回错误信息
end

7. 系统架构图

flowchart TD
subgraph 表现层
A[API路由]
B[数据验证]
end

subgraph 业务层
C[用户服务]
D[角色服务]
end

subgraph 数据层
E[用户模型]
F[角色模型]
G[数据库]
end

subgraph 工具层
H[密码工具]
I[日志工具]
end

A --> B
B --> C
B --> D
C --> E
D --> F
E --> G
F --> G
C --> H
C --> I
D --> I

8. 关键设计模式

8.1 分层架构模式

系统采用清晰的分层架构:

  • 表现层:处理HTTP请求和响应
  • 业务层:实现核心业务逻辑
  • 数据层:负责数据持久化
  • 工具层:提供通用功能支持

8.2 依赖注入模式

服务层通过依赖注入方式使用模型和工具类,提高代码的可测试性和可维护性。

8.3 观察者模式

通过日志系统记录关键操作,实现系统的可观测性。

9. 性能考虑

9.1 密码哈希优化

使用bcrypt算法进行密码哈希,提供适当的安全强度和工作因子。

9.2 数据库查询优化

  • 使用索引优化用户查询
  • 实现分页查询避免大数据量问题
  • 使用连接池管理数据库连接

9.3 缓存策略

建议实现用户信息的缓存机制,减少数据库查询压力。

10. 安全考虑

10.1 数据验证

  • 使用Pydantic进行输入数据验证
  • 实现业务逻辑层面的数据完整性检查

10.2 权限控制

  • 实现细粒度的权限控制
  • 防止权限提升攻击

10.3 日志审计

  • 记录关键操作日志
  • 实现操作追踪和审计功能

索引

邮轮穿舱件管理系统的用户权限模型采用了清晰的分层架构和模块化设计。系统通过用户-角色的一对一关系实现权限管理,使用字符串列表存储权限信息,提供了灵活的权限分配机制。密码安全采用bcrypt哈希算法,确保用户认证的安全性。整个架构具有良好的可扩展性和可维护性,为系统的稳定运行提供了坚实基础。

关键特性:

  • 完整的用户生命周期管理
  • 灵活的权限分配机制
  • 安全的密码存储方案
  • 完善的错误处理和日志记录
  • 清晰的代码分层架构

后续优化建议:

  1. 实现权限组的预定义和批量分配
  2. 添加权限继承和角色层次结构
  3. 实现更细粒度的权限控制策略
  4. 添加用户会话管理和单点登录支持