这是基于vue-vben-admin 模板适用于abp vNext的前端管理项目
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

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)

目录

  1. 简介
  2. 核心功能实现
  3. API接口设计
  4. 数据验证规则
  5. 权限控制策略
  6. 隐私保护措施
  7. 自定义用户属性扩展
  8. 账户注销流程
  9. 结论

简介

本系统提供全面的账户信息管理功能,支持用户个人资料编辑、头像上传、联系方式更新等核心操作。系统基于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框架的用户属性系统,可以在不修改核心代码的情况下扩展用户模型。

实现方式

自定义属性可以通过以下方式实现:

  1. 继承AccountApplicationServiceBase
  2. 使用SetPropertyGetProperty方法管理自定义属性
  3. 在DTO中定义相应的属性字段

这种设计模式确保了系统的可扩展性,同时保持了核心代码的稳定性。

账户注销流程

注销机制

账户注销功能由GDPR模块提供,实现了符合通用数据保护条例(GDPR)要求的用户账户删除流程。系统通过IGdprUserAccountProvider接口定义账户删除契约,具体的实现由AbpGdprIdentityUserAccountProvider类完成。

sequenceDiagram
participant 用户 as 用户
participant 页面 as 删除页面
participant 提供者 as 账户提供者
participant 用户管理 as IdentityUserManager
用户->>页面 : 请求删除账户
页面->>用户 : 确认删除
用户->>页面 : 确认
页面->>提供者 : 触发删除流程
提供者->>用户管理 : 获取用户实体
用户管理-->>提供者 : 返回用户
提供者->>提供者 : 检查是否为管理员
提供者->>用户管理 : 删除用户
用户管理-->>提供者 : 删除结果
提供者-->>页面 : 完成
页面-->>用户 : 显示成功消息

图示来源

  • AbpGdprIdentityUserAccountProvider.cs

数据清理策略

在账户删除过程中,系统实施严格的数据清理策略:

  • 删除用户主记录
  • 清理相关的会话信息
  • 移除用户权限分配
  • 保留必要的审计日志以满足合规要求

特别地,系统会保护默认管理员账户(用户名为"admin")不被删除,确保系统始终有管理入口。

节来源

  • AbpGdprIdentityUserAccountProvider.cs

结论

本账户信息管理系统提供了完整的用户信息管理解决方案,涵盖了从基本资料编辑到高级安全设置的各个方面。系统设计注重安全性、隐私保护和可扩展性,符合现代Web应用的最佳实践。通过模块化架构和清晰的接口定义,系统既满足了当前需求,又为未来的功能扩展留下了充足的空间。