10 KiB
账户信息管理
**本文档引用的文件** - [MyProfileAppService.cs](file://aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/MyProfileAppService.cs) - [MyProfileController.cs](file://aspnet-core/modules/account/LINGYUN.Abp.Account.HttpApi/LINGYUN/Abp/Account/MyProfileController.cs) - [IMyProfileAppService.cs](file://aspnet-core/modules/account/LINGYUN.Abp.Account.Application.Contracts/LINGYUN/Abp/Account/IMyProfileAppService.cs) - [ChangePictureInput.cs](file://aspnet-core/modules/account/LINGYUN.Abp.Account.Application.Contracts/LINGYUN/Abp/Account/Dto/ChangePictureInput.cs) - [AbpGdprIdentityUserAccountProvider.cs](file://aspnet-core/modules/gdpr/LINGYUN.Abp.Gdpr.Domain.Identity/LINGYUN/Abp/Gdpr/Identity/AbpGdprIdentityUserAccountProvider.cs)目录
简介
本系统提供全面的账户信息管理功能,支持用户个人资料编辑、头像上传、联系方式更新等核心操作。系统基于ABP框架构建,采用模块化设计,确保了高可维护性和可扩展性。账户管理功能涵盖了从个人信息修改到安全设置的各个方面,同时提供了完善的隐私保护机制和账户注销流程。
核心功能实现
个人资料编辑
个人资料编辑功能通过MyProfileAppService服务类实现,该服务继承自AccountApplicationServiceBase并实现了IMyProfileAppService接口。服务通过依赖注入获取必要的仓储和服务实例,包括用户仓储、短信安全码发送器、身份安全日志管理器和分布式缓存。
头像上传与管理
头像上传功能由ChangePictureAsync方法实现,该方法接收包含文件流的ChangePictureInput输入对象。系统使用IUserPictureProvider接口来处理图片存储,支持多种存储后端(如本地文件系统、云存储等)。图片ID基于GUID生成,确保唯一性。
sequenceDiagram
participant 前端 as 前端应用
participant 控制器 as MyProfileController
participant 服务 as MyProfileAppService
participant 提供者 as UserPictureProvider
前端->>控制器 : POST /api/account/my-profile/picture
控制器->>服务 : 调用ChangePictureAsync
服务->>服务 : 获取当前用户
服务->>服务 : 生成图片ID
服务->>提供者 : SetPictureAsync(用户, 文件流, 图片ID)
提供者-->>服务 : 完成
服务->>服务 : 保存工作单元
服务-->>控制器 : 返回结果
控制器-->>前端 : HTTP 200 OK
图示来源
- MyProfileAppService.cs
- MyProfileController.cs
联系方式更新
联系方式更新主要涉及手机号和邮箱的变更。系统采用安全的验证码机制来验证用户身份,防止未经授权的修改。手机号变更需要发送验证码到新号码进行验证,而邮箱变更则通过发送确认链接到新邮箱地址。
节来源
- MyProfileAppService.cs
API接口设计
RESTful API结构
系统采用RESTful风格的API设计,所有账户相关接口都位于/api/account/my-profile基础路径下。接口设计遵循HTTP方法语义,使用标准的状态码返回操作结果。
flowchart TD
A[API入口] --> B{HTTP方法}
B --> |GET| C[获取资源]
B --> |POST| D[创建资源]
B --> |PUT| E[更新资源]
B --> |DELETE| F[删除资源]
C --> G[获取会话列表]
C --> H[获取头像]
C --> I[获取双因素认证状态]
D --> J[发送手机验证码]
D --> K[发送邮箱确认链接]
D --> L[验证验证码]
E --> M[更改手机号]
E --> N[更改头像]
E --> O[更改双因素认证]
F --> P[撤销会话]
图示来源
- MyProfileController.cs
主要API端点
| 端点 | HTTP方法 | 功能描述 |
|---|---|---|
/api/account/my-profile/sessions |
GET | 获取用户会话列表 |
/api/account/my-profile/sessions/{sessionId}/revoke |
DELETE | 撤销指定会话 |
/api/account/my-profile/change-phone-number |
PUT | 更改绑定手机号 |
/api/account/my-profile/send-phone-number-change-code |
POST | 发送手机变更验证码 |
/api/account/my-profile/picture |
POST | 上传用户头像 |
/api/account/my-profile/picture |
GET | 获取用户头像 |
节来源
- MyProfileController.cs
数据验证规则
输入验证
系统采用多层数据验证机制,确保输入数据的完整性和安全性。在DTO层面使用数据注解进行基本验证,在服务层面进行业务逻辑验证。
public class ChangePictureInput
{
[Required]
[DisableAuditing]
public IRemoteStreamContent File { get; set; }
}
上述代码展示了头像上传的输入验证规则,要求文件字段必须提供且不参与审计记录。
业务规则验证
除了基本的数据类型验证外,系统还实施了多项业务规则验证:
- 手机号唯一性验证:确保新手机号未被其他用户绑定
- 验证码时效性验证:验证码在指定时间内有效,防止重复发送
- 并发控制:使用用户并发戳确保操作的一致性
节来源
- ChangePictureInput.cs
- MyProfileAppService.cs
权限控制策略
认证与授权
所有账户管理API都受到严格的权限控制。通过[Authorize]特性确保只有经过身份验证的用户才能访问相关功能。系统使用ABP框架的权限管理系统,可以细粒度地控制不同用户的操作权限。
敏感操作保护
对于敏感操作(如手机号变更、双因素认证设置),系统实施额外的安全措施:
- 操作前需要验证用户身份
- 记录详细的安全日志
- 在分布式缓存中存储临时安全令牌
graph TB
A[用户请求] --> B{是否认证}
B --> |否| C[返回401]
B --> |是| D{操作类型}
D --> |普通操作| E[直接执行]
D --> |敏感操作| F[验证安全令牌]
F --> G{令牌有效?}
G --> |否| H[返回403]
G --> |是| I[执行操作]
I --> J[记录安全日志]
图示来源
- MyProfileController.cs
- MyProfileAppService.cs
隐私保护措施
数据最小化原则
系统遵循数据最小化原则,只收集和存储必要的用户信息。用户可以随时查看、修改或删除自己的个人信息。
审计日志
所有敏感操作都会被记录在审计日志中,包括:
- 登录/登出事件
- 个人信息变更
- 安全设置修改
- 会话管理操作
这些日志有助于追踪异常行为和满足合规要求。
节来源
- MyProfileAppService.cs
自定义用户属性扩展
扩展点设计
系统提供了灵活的扩展机制,允许开发者添加自定义用户属性。通过ABP框架的用户属性系统,可以在不修改核心代码的情况下扩展用户模型。
实现方式
自定义属性可以通过以下方式实现:
- 继承
AccountApplicationServiceBase类 - 使用
SetProperty和GetProperty方法管理自定义属性 - 在DTO中定义相应的属性字段
这种设计模式确保了系统的可扩展性,同时保持了核心代码的稳定性。
账户注销流程
注销机制
账户注销功能由GDPR模块提供,实现了符合通用数据保护条例(GDPR)要求的用户账户删除流程。系统通过IGdprUserAccountProvider接口定义账户删除契约,具体的实现由AbpGdprIdentityUserAccountProvider类完成。
sequenceDiagram
participant 用户 as 用户
participant 页面 as 删除页面
participant 提供者 as 账户提供者
participant 用户管理 as IdentityUserManager
用户->>页面 : 请求删除账户
页面->>用户 : 确认删除
用户->>页面 : 确认
页面->>提供者 : 触发删除流程
提供者->>用户管理 : 获取用户实体
用户管理-->>提供者 : 返回用户
提供者->>提供者 : 检查是否为管理员
提供者->>用户管理 : 删除用户
用户管理-->>提供者 : 删除结果
提供者-->>页面 : 完成
页面-->>用户 : 显示成功消息
图示来源
- AbpGdprIdentityUserAccountProvider.cs
数据清理策略
在账户删除过程中,系统实施严格的数据清理策略:
- 删除用户主记录
- 清理相关的会话信息
- 移除用户权限分配
- 保留必要的审计日志以满足合规要求
特别地,系统会保护默认管理员账户(用户名为"admin")不被删除,确保系统始终有管理入口。
节来源
- AbpGdprIdentityUserAccountProvider.cs
结论
本账户信息管理系统提供了完整的用户信息管理解决方案,涵盖了从基本资料编辑到高级安全设置的各个方面。系统设计注重安全性、隐私保护和可扩展性,符合现代Web应用的最佳实践。通过模块化架构和清晰的接口定义,系统既满足了当前需求,又为未来的功能扩展留下了充足的空间。