fengling-console/CONSOLE_DEVELOPMENT.md
2026-02-03 15:30:12 +08:00

317 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 风铃认证中心 - 管理端开发完成
## 项目概述
本项目为风铃认证中心提供完整的 Web 管理界面和后端 API。
## 技术栈
### 前端
- Vue 3 + TypeScript
- Vite
- Element Plus UI 框架
- Pinia 状态管理
- Vue Router 路由
- Axios HTTP 客户端
### 后端
- ASP.NET Core 10.0
- Entity Framework Core 10.0
- PostgreSQL 数据库
- OpenIddict OAuth2/OIDC 服务
- Serilog 日志
- OpenTelemetry 可观测性
## 完成的功能
### 前端页面
#### 1. 仪表盘Dashboard
- 统计卡片用户数、租户数、OAuth应用数、今日访问
- 最近活动时间线
- 系统信息展示
- 位置:`src/views/Dashboard/Dashboard.vue`
#### 2. 用户管理
- 用户列表(分页、搜索)
- 添加/编辑用户
- 角色分配
- 重置密码
- 删除用户
- 位置:`src/views/Users/UserList.vue`
#### 3. 角色管理
- 角色列表(分页、搜索)
- 添加/编辑角色
- 权限配置
- 查看角色用户
- 移除用户角色
- 位置:`src/views/Users/RoleList.vue`
#### 4. 租户管理
- 租户列表(分页、搜索)
- 添加/编辑租户
- 租户设置(注册限制、密码策略、会话超时)
- 查看租户用户和角色
- 位置:`src/views/Users/TenantList.vue`
#### 5. OAuth 应用管理
- 应用列表(分页、搜索)
- 添加/编辑应用
- 完整配置重定向URI、授权类型、权限范围等
- 查看密钥
- 位置:`src/views/OAuth/ClientList.vue`
#### 6. 访问日志
- 日志列表(多条件筛选)
- 日志详情查看
- 导出 CSV
- 位置:`src/views/Audit/AccessLog.vue`
#### 7. 审计日志
- 日志列表(多条件筛选)
- 日志详情查看(包含变更前/后数据)
- 导出 CSV
- 位置:`src/views/Audit/AuditLog.vue`
### 后端 API
#### 控制器
1. **AuthController** - 认证端点
- POST /connect/token - 登录(密码模式)
- POST /connect/token/refresh - 刷新令牌
- POST /connect/revoke - 撤销令牌
2. **UsersController** - 用户管理
- GET /api/users - 获取用户列表(分页、搜索)
- GET /api/users/{id} - 获取单个用户
- POST /api/users - 创建用户
- PUT /api/users/{id} - 更新用户
- PUT /api/users/{id}/password - 重置密码
- DELETE /api/users/{id} - 删除用户
3. **RolesController** - 角色管理
- GET /api/roles - 获取角色列表(分页、搜索)
- GET /api/roles/{id} - 获取单个角色
- GET /api/roles/{id}/users - 获取角色用户
- POST /api/roles - 创建角色
- PUT /api/roles/{id} - 更新角色
- DELETE /api/roles/{id} - 删除角色
- DELETE /api/roles/{id}/users/{userId} - 移除用户角色
4. **TenantsController** - 租户管理
- GET /api/tenants - 获取租户列表(分页、搜索)
- GET /api/tenants/{id} - 获取单个租户
- GET /api/tenants/{tenantId}/users - 获取租户用户
- GET /api/tenants/{tenantId}/roles - 获取租户角色
- GET /api/tenants/{tenantId}/settings - 获取租户设置
- PUT /api/tenants/{tenantId}/settings - 更新租户设置
- POST /api/tenants - 创建租户
- PUT /api/tenants/{id} - 更新租户
- DELETE /api/tenants/{id} - 删除租户
5. **OAuthClientsController** - OAuth 应用管理
- GET /api/oauthclients - 获取应用列表(分页、搜索)
- GET /api/oauthclients/{id} - 获取单个应用
- GET /api/oauthclients/{id}/secret - 获取应用密钥
- POST /api/oauthclients - 创建应用
- PUT /api/oauthclients/{id} - 更新应用
- DELETE /api/oauthclients/{id} - 删除应用
6. **AccessLogsController** - 访问日志
- GET /api/access-logs - 获取日志列表(分页、筛选)
- GET /api/access-logs/export - 导出 CSV
7. **AuditLogsController** - 审计日志
- GET /api/audit-logs - 获取日志列表(分页、筛选)
- GET /api/audit-logs/export - 导出 CSV
8. **StatsController** - 统计数据
- GET /api/stats/dashboard - 仪表盘统计数据
- GET /api/stats/system - 系统统计信息
9. **HealthCheckController** - 健康检查
- GET /health - 健康检查端点
### 数据模型
#### 核心模型
1. **ApplicationUser** - 用户
- 继承自 IdentityUser<long>
- RealName, Phone, TenantId, CreatedTime, UpdatedTime, IsDeleted
2. **ApplicationRole** - 角色
- 继承自 IdentityRole<long>
- Description, DisplayName, TenantId, IsSystem, Permissions, CreatedTime
3. **Tenant** - 租户
- Id, TenantId, Name, ContactName, ContactEmail, ContactPhone
- MaxUsers, Description, Status, ExpiresAt, CreatedAt, UpdatedAt, IsDeleted
4. **OAuthApplication** - OAuth 应用
- Id, ClientId, ClientSecret, DisplayName
- RedirectUris, PostLogoutRedirectUris, Scopes, GrantTypes
- ClientType, ConsentType, Status, Description, CreatedAt, UpdatedAt
5. **AccessLog** - 访问日志
- UserName, TenantId, Action, Resource, Method, IpAddress
- UserAgent, Status, Duration, RequestData, ResponseData, ErrorMessage
- CreatedAt
6. **AuditLog** - 审计日志
- Operator, TenantId, Operation, Action
- TargetType, TargetId, TargetName, IpAddress, Description
- OldValue, NewValue, ErrorMessage, Status, CreatedAt
### 数据库配置
- **数据库类型**: PostgreSQL
- **连接字符串**: `Host=192.168.100.10;Port=5432;Database=fengling_auth;Username=movingsam;Password=sl52788542`
- **迁移**:
- InitialCreate - 初始化表结构
- AddOAuthApplications - 添加 OAuth 应用表
- AddTenantAndLogs - 添加租户和日志表
- AddOAuthDescription - 添加 OAuth 描述字段
### 初始数据
SeedData 初始化以下数据:
#### 默认租户
- TenantId: default
- Name: 默认租户
- MaxUsers: 1000
#### 系统角色
1. **Admin** - 管理员
- 所有权限
- IsSystem: true
2. **User** - 普通用户
- user.view 权限
- IsSystem: true
#### 默认用户
1. **admin**
- 密码: Admin@123
- 角色: Admin
2. **testuser**
- 密码: Test@123
- 角色: User
#### OAuth 应用
- **fengling-console** - 风铃运管中心
- ClientSecret: console-secret-change-in-production
- 授权类型: authorization_code, refresh_token
## 运行说明
### 后端AuthService
```bash
cd src/Fengling.AuthService
dotnet build
dotnet run
```
服务地址: http://localhost:5000
API 文档: http://localhost:5000/swagger
健康检查: http://localhost:5000/health
### 前端Console.Web
```bash
cd src/Fengling.Console.Web
npm install
npm run dev
```
开发地址: http://localhost:5173
生产构建:
```bash
npm run build
```
## API 代理配置
Vite 开发服务器配置了 API 代理:
- `/api/auth/*``http://localhost:5000` (AuthService)
- `/api/gateway/*``http://localhost:5001` (YarpGateway)
## 默认登录
- 用户名: admin
- 密码: Admin@123
## 文件结构
```
Fengling.Refactory.Buiding/
├── src/
│ ├── Fengling.AuthService/ # 后端认证服务
│ │ ├── Controllers/ # API 控制器
│ │ ├── Data/ # 数据库上下文和种子数据
│ │ ├── Models/ # 数据模型
│ │ ├── Configuration/ # 配置类
│ │ └── Migrations/ # 数据库迁移
│ │
│ └── Fengling.Console.Web/ # 前端管理界面
│ ├── src/
│ │ ├── api/ # API 调用封装
│ │ ├── stores/ # Pinia 状态管理
│ │ ├── router/ # Vue Router 路由
│ │ └── views/ # 页面组件
│ │ ├── Auth/ # 认证页面
│ │ ├── Dashboard/ # 仪表盘
│ │ ├── Users/ # 用户/角色/租户管理
│ │ ├── OAuth/ # OAuth 应用管理
│ │ └── Audit/ # 日志管理
│ └── dist/ # 生产构建输出
└── docs/ # 项目文档
```
## 安全建议
1. **生产环境修改**:
- 更改默认管理员密码
- 修改 OAuth 应用密钥
- 配置 HTTPS
- 限制数据库访问
2. **密码策略**:
- 至少 8 位
- 包含字母和数字
- 可根据租户设置自定义策略
## 后续优化建议
1. **前端**:
- 添加更多图表可视化
- 实现前端国际化
- 添加单元测试
2. **后端**:
- 添加 API 限流
- 实现缓存策略
- 添加更多日志级别
- 完善错误处理
3. **功能**:
- OAuth 授权码流程完善
- 双因素认证2FA
- 用户自助服务(找回密码、注册)
- API 权限细粒度控制
## 版本信息
- 前端版本: v1.0.0
- 后端版本: v1.0.0
- .NET 版本: 10.0.2
- Node.js 版本: 推荐 18+