14 KiB
14 KiB
系统管理功能
**本文档引用的文件** - [backend/app/api/v1/menus.py](file://backend/app/api/v1/menus.py) - [backend/app/services/menu_service.py](file://backend/app/services/menu_service.py) - [backend/app/models/models.py](file://backend/app/models/models.py) - [backend/app/core/security.py](file://backend/app/core/security.py) - [backend/app/core/config.py](file://backend/app/core/config.py) - [backend/app/schemas/schemas.py](file://backend/app/schemas/schemas.py) - [backend/app/api/v1/auth.py](file://backend/app/api/v1/auth.py) - [backend/app/core/init_db.py](file://backend/app/core/init_db.py) - [backend/app/main.py](file://backend/app/main.py) - [frontend/src/views/system/Menus.vue](file://frontend/src/views/system/Menus.vue) - [frontend/src/router/index.js](file://frontend/src/router/index.js) - [docs/backend.md](file://docs/backend.md)目录
简介
医院绩效系统管理功能是一个基于RBAC(基于角色的访问控制)权限模型的完整管理系统。该系统实现了菜单权限管理、用户角色管理、系统配置管理和日志审计功能,为医院提供了统一的权限控制和系统管理能力。
系统采用前后端分离架构,后端基于FastAPI + SQLAlchemy 2.0 + PostgreSQL,前端基于Vue.js + Element Plus。通过JWT令牌进行身份认证,实现了严格的权限控制和安全的系统管理功能。
项目结构
系统管理功能主要分布在以下模块中:
graph TB
subgraph "后端架构"
A[API路由层] --> B[服务层]
B --> C[数据模型层]
C --> D[数据库]
E[安全认证模块] --> F[配置管理模块]
G[前端路由] --> H[菜单管理界面]
end
subgraph "核心功能模块"
I[菜单权限管理]
J[用户角色管理]
K[系统配置管理]
L[日志审计功能]
end
A --> I
A --> J
A --> K
A --> L
图表来源
章节来源
核心组件
系统管理功能的核心组件包括:
RBAC权限模型
- 用户角色:admin(管理员)、manager(经理)、staff(普通员工)
- 权限控制:基于角色的访问控制,支持细粒度权限管理
- JWT认证:使用JWT令牌进行身份验证和授权
菜单权限管理
- 菜单树形结构:支持多级菜单的层次化管理
- 动态加载:根据用户权限动态加载可访问的菜单
- 权限标识:每个菜单项支持独立的权限标识符
用户角色管理
- 用户生命周期:完整的用户创建、更新、禁用管理
- 角色分配:灵活的角色分配和权限继承
- 密码安全:bcrypt密码哈希和安全存储
系统配置管理
- 环境配置:集中式的系统配置管理
- 数据库配置:支持异步PostgreSQL连接池
- CORS配置:跨域资源共享的安全配置
章节来源
架构概览
系统采用分层架构设计,确保职责分离和代码可维护性:
graph TB
subgraph "表现层"
FE[前端Vue应用]
UI[Element Plus组件]
end
subgraph "API网关层"
API[FastAPI路由]
AUTH[认证中间件]
VALID[数据验证]
end
subgraph "业务逻辑层"
SVC[服务层]
RBAC[RBAC权限控制]
LOG[日志记录]
end
subgraph "数据持久层"
ORM[SQLAlchemy ORM]
DB[(PostgreSQL数据库)]
end
FE --> API
UI --> API
API --> AUTH
AUTH --> SVC
SVC --> RBAC
SVC --> LOG
SVC --> ORM
ORM --> DB
图表来源
详细组件分析
菜单权限管理系统
菜单数据模型设计
classDiagram
class Menu {
+int id
+int parent_id
+MenuType menu_type
+string menu_name
+string menu_icon
+string path
+string component
+string permission
+int sort_order
+bool is_visible
+bool is_active
+datetime created_at
+datetime updated_at
+Menu[] children
+Menu parent
}
class MenuType {
<<enumeration>>
MENU
BUTTON
}
class MenuService {
+get_tree(visible_only) Dict[]
+get_list(menu_type, is_visible) Menu[]
+get_by_id(menu_id) Menu
+create(menu_data) Menu
+update(menu_id, menu_data) Menu
+delete(menu_id) bool
+init_default_menus() void
}
MenuService --> Menu : manages
Menu --> Menu : parent_child
Menu --> MenuType : uses
图表来源
菜单权限验证流程
sequenceDiagram
participant Client as 客户端
participant API as 菜单API
participant Service as 菜单服务
participant DB as 数据库
participant Security as 安全模块
Client->>API : GET /menus/tree
API->>Security : 验证JWT令牌
Security-->>API : 返回用户信息
API->>Service : get_tree(visible_only)
Service->>DB : 查询菜单树
DB-->>Service : 返回菜单数据
Service->>Service : 过滤可见菜单
Service-->>API : 返回菜单树
API-->>Client : 菜单树数据
Note over Client,Security : 权限验证流程
Client->>API : POST /menus
API->>Security : 验证管理员权限
Security-->>API : 权限通过
API->>Service : create(menu_data)
Service->>DB : 创建菜单
DB-->>Service : 返回新菜单
Service-->>API : 返回菜单ID
API-->>Client : 创建成功
图表来源
菜单动态加载机制
前端通过以下流程实现菜单的动态加载:
flowchart TD
Start([页面加载]) --> LoadToken["读取JWT令牌"]
LoadToken --> HasToken{"令牌存在?"}
HasToken --> |否| RedirectLogin["重定向到登录页"]
HasToken --> |是| FetchTree["调用GET /menus/tree"]
FetchTree --> FilterVisible["过滤可见菜单"]
FilterVisible --> BuildMenu["构建菜单树"]
BuildMenu --> LoadRoutes["动态加载路由"]
LoadRoutes --> RenderUI["渲染界面"]
RenderUI --> End([完成])
RedirectLogin --> End
图表来源
章节来源
- backend/app/api/v1/menus.py
- backend/app/services/menu_service.py
- frontend/src/views/system/Menus.vue
用户角色管理系统
RBAC权限模型实现
classDiagram
class User {
+int id
+string username
+string password_hash
+int staff_id
+string role
+bool is_active
+datetime last_login
+datetime created_at
+datetime updated_at
}
class Role {
<<enumeration>>
admin
manager
staff
}
class Permission {
+string resource
+string action
+string effect
}
class SecurityContext {
+User currentUser
+Permission[] permissions
+validatePermission(permission) bool
+hasRole(role) bool
}
User --> Role : has
SecurityContext --> User : authenticates
SecurityContext --> Permission : checks
图表来源
用户认证流程
sequenceDiagram
participant Browser as 浏览器
participant AuthAPI as 认证API
participant Security as 安全模块
participant DB as 数据库
participant JWT as JWT服务
Browser->>AuthAPI : POST /auth/login
AuthAPI->>Security : 验证密码
Security->>DB : 查询用户
DB-->>Security : 返回用户信息
Security->>Security : 验证密码哈希
Security-->>AuthAPI : 验证结果
AuthAPI->>JWT : 创建访问令牌
JWT-->>AuthAPI : 返回JWT令牌
AuthAPI-->>Browser : 返回令牌
Note over Browser,JWT : 后续请求携带令牌
Browser->>AuthAPI : 带JWT令牌的请求
AuthAPI->>Security : 解码和验证令牌
Security-->>Browser : 授权通过
图表来源
章节来源
系统配置管理
配置管理架构
graph TB
subgraph "配置层次"
A[环境变量]
B[配置文件]
C[运行时配置]
end
subgraph "配置类型"
D[应用配置]
E[数据库配置]
F[JWT配置]
G[CORS配置]
H[分页配置]
end
A --> B
B --> C
C --> D
C --> E
C --> F
C --> G
C --> H
图表来源
配置初始化流程
flowchart TD
Start([系统启动]) --> LoadEnv["加载环境变量"]
LoadEnv --> InitConfig["初始化配置"]
InitConfig --> ValidateConfig{"配置验证"}
ValidateConfig --> |通过| InitDB["初始化数据库"]
ValidateConfig --> |失败| LogError["记录错误"]
LogError --> End([结束])
InitDB --> InitAdmin["创建管理员用户"]
InitAdmin --> InitSample["创建示例数据"]
InitSample --> Complete([完成])
图表来源
章节来源
日志审计功能
日志记录机制
系统实现了多层次的日志记录功能:
- 应用日志:记录系统运行状态和错误信息
- 访问日志:记录用户访问行为和操作
- 审计日志:记录重要的系统变更和敏感操作
章节来源
依赖关系分析
系统管理功能的依赖关系如下:
graph TB
subgraph "外部依赖"
A[FastAPI]
B[SQLAlchemy]
C[PostgreSQL]
D[JWT]
E[bcrypt]
end
subgraph "内部模块"
F[API路由]
G[服务层]
H[数据模型]
I[安全模块]
J[配置模块]
end
A --> F
B --> G
C --> H
D --> I
E --> I
F --> G
G --> H
I --> J
F --> I
G --> I
图表来源
章节来源
性能考虑
系统管理功能在设计时充分考虑了性能优化:
数据库性能优化
- 索引设计:为常用查询字段建立适当的索引
- 连接池:使用异步连接池提高数据库访问效率
- 查询优化:避免N+1查询问题,使用selectinload优化关系查询
缓存策略
- 菜单缓存:菜单数据变化频率较低,适合缓存
- 用户信息缓存:JWT令牌中包含用户基本信息
- 配置缓存:系统配置在启动时加载并缓存
并发处理
- 异步IO:使用async/await模式提高并发处理能力
- 数据库事务:合理使用事务保证数据一致性
- 锁机制:避免死锁和长时间持有锁
故障排除指南
常见问题及解决方案
登录认证问题
- 问题:用户无法登录
- 原因:用户名密码错误或账户被禁用
- 解决:检查用户状态和密码哈希
权限访问问题
- 问题:用户无法访问某些功能
- 原因:角色权限不足或菜单权限未配置
- 解决:检查用户角色和菜单权限设置
菜单显示问题
- 问题:菜单不显示或显示异常
- 原因:菜单树构建错误或权限过滤问题
- 解决:检查菜单层级关系和可见性设置
章节来源
结论
医院绩效系统的系统管理功能通过完善的RBAC权限模型、动态菜单管理和严格的安全控制,为医院提供了强大而灵活的系统管理能力。系统采用现代化的技术栈和架构设计,具有良好的扩展性和维护性。
主要特点包括:
- 完整的权限控制:基于角色的细粒度权限管理
- 动态菜单系统:根据用户权限动态加载菜单
- 安全可靠:JWT认证和bcrypt密码哈希
- 易于扩展:模块化设计支持功能扩展
- 性能优化:异步处理和数据库优化
该系统为医院的数字化转型提供了坚实的技术基础,能够有效提升医院管理效率和决策水平。
附录
权限配置说明
角色权限矩阵
- admin:系统管理员,拥有所有权限
- manager:部门经理,拥有部门相关权限
- staff:普通员工,仅拥有基本操作权限
菜单权限标识
- 资源格式:
{模块}:{操作}:{权限} - 示例:
system:menu:list、basic:user:create
菜单结构设计
菜单类型
- 菜单:用于导航的主菜单项
- 按钮:用于具体操作的按钮权限
菜单属性
- 路径:前端路由路径
- 组件:Vue组件名称
- 图标:Element Plus图标名称
- 排序:菜单显示顺序
安全策略
密码安全
- 哈希算法:bcrypt
- 盐值生成:自动生成随机盐值
- 密码强度:最小长度6位
令牌管理
- 过期时间:8小时
- 算法:HS256
- 存储:localStorage