GDPR模块(专业版)
使用此模块需持有ABP团队版或更高级别许可
该模块允许用户下载和删除应用程序收集的个人数据。
GDPR模块向引用
Volo.Abp.Gdpr.Abstractions包的其他模块请求信息,并将响应数据合并为单个JSON文件,用户可后续下载个人数据。同时,用户可永久删除其个人数据和账户。
模块功能概览请参阅模块描述页。
安装指南
GDPR模块已预安装在 分层 Web 应用模板 和 单层Web应用模板 中,无需手动安装。
如需手动安装,可通过两种方式实现:
- 通过ABP CLI: 在解决方案文件夹(包含
*.sln文件的目录)中打开命令行终端,执行以下命令:
abp add-module Volo.Gdpr
- 通过ABP Suite: 运行ABP Suite,选择项目后进入顶部菜单的模块页面,找到GDPR卡片并点击**添加为项目(含源代码)或添加为包(不含源代码)**按钮将模块添加到项目中。
包组成
本模块遵循模块开发最佳实践指南,包含多个NuGet和NPM包。如需了解包结构及其关联关系,请参阅该指南。
可访问Gdpr模块包列表页面查看相关包列表。
用户界面
菜单项
GDPR模块在"用户"资料菜单中添加以下项目:
- 个人数据:个人数据管理页面。可请求个人数据、列出所有个人数据请求、下载/删除个人数据,以及永久删除账户。
GdprMenus类中定义了该菜单项名称的常量变量。
页面功能
个人数据页面
"个人数据"页面用于管理个人数据请求。可查看历史请求、当前最新请求状态、创建新请求、下载数据或永久删除所有个人数据及账户。
GDPR模块专为分布式架构设计。当用户请求个人数据时,模块会发布两个事件:
GdprUserDataRequestedEto:触发个人数据收集器准备用户数据GdprUserDataDeletionRequestedEto:触发个人数据收集器删除用户数据
您可订阅这些事件,在自定义模块中实现数据收集和删除逻辑。详见分布式事件章节。
查看GDPR模块其他功能,请访问模块描述页。
配置选项
AbpGdprOptions
可在模块的ConfigureServices方法中配置AbpGdprOptions:
Configure<AbpGdprOptions>(options =>
{
//在此设置选项...
});
AbpGdprOptions属性:
RequestTimeInterval(默认:1天):设置允许的请求时间间隔。可根据需要调整个人数据请求频率,默认用户每天可请求一次个人数据。MinutesForDataPreparation(默认:60分钟):由于GDPR模块支持分布式场景,收集和准备个人数据需要时间。可根据应用规模调整数据准备时长。
AbpCookieConsentOptions
用于配置Cookie同意功能,可在模块的ConfigureServices方法中配置:
Configure<AbpCookieConsentOptions>(options =>
{
IsEnabled = true;
CookiePolicyUrl = "/CookiePolicy";
PrivacyPolicyUrl = "/PrivacyPolicy";
Expiration = TimeSpan.FromDays(180);
});
AbpCookieConsentOptions属性:
IsEnabled(默认:false):启用或禁用Cookie同意功能。CookiePolicyUrl:定义Cookie政策页面URL。设置后,Cookie同意声明中会自动添加"Cookie政策"链接,用户可在接受前查看政策。支持本地地址(如/CookiePolicy)或完整URL(如https://example.com/cookie-policy)。PrivacyPolicyUrl:定义隐私政策页面URL。设置后,Cookie同意声明中会自动添加"隐私政策"链接。支持本地地址(如/PrivacyPolicy)或完整URL。Expiration:定义Cookie同意的过期时间。默认接受同意后会设置.AspNet.Consentcookie,有效期6个月。
内部实现
领域层
聚合体
本模块遵循实体最佳实践与规范。
GdprRequest
GDPR请求的主聚合根。存储请求的通用信息及从其他模块收集的GdprInfo(个人数据)列表。
GdprRequest(聚合根):表示用户发起的GDPR请求。UserId:发起请求的用户ID。ReadyTime:数据准备过程的截止时间。根据AbpGdprOptions的MinutesForDataPreparation属性与请求创建时间计算得出。Info(集合):包含收集的用户个人数据。
实体
GdprInfo
用于存储从模块/提供程序收集的数据。
GdprInfo(实体):表示用户的个人数据。RequestId:GDPR请求ID。Data:存储个人数据。Provider:指示收集个人数据的模块。
存储库
本模块遵循存储库最佳实践与规范。
为模块定义了以下自定义存储库:
IGdprRequestRepository
事件处理器
GdprUserDataEventHandler
由应用中的个人数据提供程序触发。将收集的数据保存至数据库。
应用层
应用服务
GdprRequestAppService(实现IGdprRequestAppService):实现个人数据页面的用例逻辑。
数据库支持
通用配置
表/集合前缀与模式
如需修改表前缀或设置模式名称(如果数据库提供程序支持),可设置GdprDbProperties类的静态属性。
连接字符串
本模块使用AbpGdpr作为连接字符串名称。如未定义该名称的连接字符串,将回退到Default连接字符串。
详见连接字符串文档。
Entity Framework Core / MongoDB
表/集合
- AbpGdprRequests
- AbpGdprInfos
实体关系
Angular UI
安装配置
要将应用配置为使用gdpr模块,首先需要从@volo/abp.ng.gdpr/config导入provideGdprConfig,然后将其添加到appConfig数组:
// app.config.ts
import {
provideGdprConfig,
withCookieConsentOptions,
} from '@volo/abp.ng.gdpr/config';
export const appConfig: ApplicationConfig = {
providers: [
provideGdprConfig(
withCookieConsentOptions({
cookiePolicyUrl: '/gdpr-cookie-consent/cookie',
privacyPolicyUrl: '/gdpr-cookie-consent/privacy',
}),
),
],
};
gdpr模块应在路由数组中通过懒加载导入。可通过静态方法createRoutes进行配置,可用选项如下。可从@volo/abp.ng.gdpr导入:
// app.routes.ts
const APP_ROUTES: Routes = [
// 其他路由定义
{
path: 'gdpr',
loadChildren: () =>
import('@volo/abp.ng.gdpr').then(c => c.createRoutes(/* 在此添加选项 */)),
},
];
如果通过启动模板生成项目,则无需额外配置,因为相关文件已预先配置完成。
配置选项
可通过向createRoutes静态方法传递以下选项来修改模块页面的外观和行为:
- entityActionContributors: 修改网格操作。详见Angular实体操作扩展。
- toolbarActionContributors: 修改页面工具栏。详见Angular页面工具栏扩展。
- entityPropContributors: 修改表格列。详见Angular数据表列扩展。
- createFormPropContributors: 修改创建表单字段。详见Angular动态表单扩展。
- editFormPropContributors: 修改编辑表单字段。详见Angular动态表单扩展。
分布式事件
GDPR模块采用异步数据收集机制,兼容微服务解决方案。用户请求信息时会发布事件。
GdprUserDataRequestedEto
发布此事件传输对象 以触发所有个人数据收集器开始准备数据。如需为模块收集个人数据,需订阅此ETO类,并发布包含已收集数据的GdprUserDataPreparedEto事件。
GdprUserDataPreparedEto
此事件传输对象用于将收集的个人数据按模块保存为独立JSON文件。通常无需实现此事件处理器,因为模块已内置实现,会将收集的数据以压缩包形式返回,内含多个JSON文件,每个文件包含来自特定模块的数据。
GdprUserDataDeletionRequestedEto
当用户请求永久删除个人数据和账户时发布此 事件传输对象 。默认仅 身份认证专业模块 中的IdentityGdprEventHandler会订阅此事件,对用户数据进行匿名化处理并删除账户(默认使用软删除,除非另行配置)。
如需删除其他模块中存储的敏感用户数据,可订阅此事件并在相应模块中实现自定义删除(或匿名化)逻辑。
Cookie同意功能
Cookie同意功能可在保存用户特定数据前,向应用用户进行告知提示。
该功能默认在 分层 Web 应用 和 单层 Web 应用 启动模板中启用。通过配置 AbpCookieConsentOptions 可轻松启用/禁用Cookie同意提示。
如需自定义Cookie同意组件中的文本,只需在本地化资源文件中定义以下本地化键并修改内容:
"本网站使用Cookie": "本网站使用Cookie以确保您获得最佳网站体验。",
"Cookie同意接受政策": "若继续浏览,即表示您同意我们的{0}和{1}。",
"Cookie同意接受单一政策": "若继续浏览,即表示您同意我们的{0}。",
关于定义本地化资源和覆盖预构建模块本地化条目的更多信息,请参阅本地化文档。
配置Cookie同意
在应用中启用Cookie同意需完成两个步骤:
1. 在模块类的ConfigureServices方法中配置服务:
context.Services.AddAbpCookieConsent(options =>
{
options.IsEnabled = true;
options.CookiePolicyUrl = "/CookiePolicy";
options.PrivacyPolicyUrl = "/PrivacyPolicy";
});
2. 在请求管道中添加中间件(在OnApplicationInitialization方法中):
public override void OnApplicationInitialization(ApplicationInitializationContenxt context)
{
var app = context.GetApplicationBuilder();
//...
+ app.UseAbpCookieConsent();
app.UseCorrelationId();
app.UseRouting();
app.MapAbpStaticAssets();
app.UseAbpSecurityHeaders();
app.UseAuthentication();
//...
}
配置完成后,页面底部将显示Cookie同意横幅,其中包含指向《Cookie政策》和《隐私政策》的链接,有助于告知用户并支持GDPR合规要求。
抠丁客






