租户管理模块
多租户 是 ABP 的核心特性之一。它为构建您自己的 SaaS(软件即服务)解决方案提供了基础架构。ABP的多租户系统通过提供 ITenantStore 接口,抽象了租户存储的实现细节,您只需实现该接口即可。
租户管理模块是ITenantStore接口的一个实现。它将租户信息存储在数据库中,并提供了用于管理租户及其功能的用户界面。
请参阅 多租户 文档以理解ABP的多租户系统。本文档重点介绍租户管理模块。
关于ABP SaaS模块
SaaS模块是该模块的另一个实现,提供了更多功能和可能性。它作为ABP订阅的一部分进行分发。
如何安装
当您使用ABP创建新解决方案时,此模块已作为预安装包(NuGet/NPM包)包含在内。您可以继续将其作为包使用并轻松获取更新,或者将其源代码集成到您的解决方案中(请参见get-source CLI命令),以便开发自定义模块。
源代码
该模块的源代码可以在这里访问。源代码采用MIT许可,因此您可以自由使用和定制它。
用户界面
此模块将"管理 -> 租户管理 -> 租户"菜单项添加到应用程序的主菜单中,点击后将打开如下所示页面:
在此页面中,您可以看到所有租户。您可以创建新租户,如下所示:
在此模态框中:
- 名称:租户的唯一名称。如果您为租户使用子域名(例如<https://some-tenant.your-domain.com),这将是子域名。>
- 管理员邮箱地址:此租户管理员用户的邮箱地址。
- 管理员密码:此租户管理员用户的密码。
当您点击租户旁边的操作按钮时,您将看到可执行的操作:
管理租户功能
“功能”操作将打开一个模态框,用于为相关租户启用/禁用/设置功能。以下是一个示例模态框:
管理宿主功能
如果您的应用程序功能也用于宿主端,则可以使用管理宿主功能按钮来设置宿主端的功能。
分布式事件
此模块定义了以下ETO(事件传输对象),允许您订阅模块实体的变更:
TenantEto:在对Tenant实体执行变更时发布。
示例:当新租户创建时接收通知
public class MyHandler :
IDistributedEventHandler<EntityCreatedEto<TenantEto>>,
ITransientDependency
{
public async Task HandleEventAsync(EntityCreatedEto<TenantEto> eventData)
{
TenantEto tenant = eventData.Entity;
// TODO: ...
}
}
TenantEto已配置为自动发布事件。对于其他实体,您需要自行配置。请参阅分布式事件总线文档以了解预定义事件的详细信息。
订阅分布式事件在分布式场景(如微服务架构)中特别有用。如果您正在构建单体应用程序,或者在运行租户管理模块的同一进程中监听事件,那么订阅本地事件可能更高效、更容易。
内部结构
如果您希望在不更改其源代码的情况下自定义此模块,本节可作为参考。
领域层
聚合
Tenant
仓储
ITenantRepository
领域服务
TenantManager
应用层
应用服务
TenantAppService
权限
AbpTenantManagement.Tenants:租户管理。AbpTenantManagement.Tenants.Create:创建新租户。AbpTenantManagement.Tenants.Update:编辑现有租户。AbpTenantManagement.Tenants.Delete:删除现有租户。AbpTenantManagement.Tenants.ManageFeatures:管理租户功能。
Entity Framework Core 集成
TenantManagementDbContext(实现ITenantManagementDbContext)
数据库表:
AbpTenantsAbpTenantConnectionStrings
MongoDB 集成
TenantManagementMongoDbContext(实现ITenantManagementMongoDbContext)
数据库集合:
AbpTenants(也包含连接字符串)
注意事项
ABP允许使用每个租户独立数据库的方法,允许租户拥有专用的数据库。该模块具备了实现此功能的基础设施(参见其源代码),但并未在应用层和UI功能上提供开箱即用的实现。您可以自行实现这些功能,或者考虑使用ABP SaaS模块,该模块完全实现了此功能并提供了更多的业务特性。
抠丁客






