项目

租户管理模块

多租户 是 ABP 的核心特性之一。它为构建您自己的 SaaS(软件即服务)解决方案提供了基础架构。ABP的多租户系统通过提供 ITenantStore 接口,抽象了租户存储的实现细节,您只需实现该接口即可。

租户管理模块是ITenantStore接口的一个实现。它将租户信息存储在数据库中,并提供了用于管理租户及其功能的用户界面。

参阅 多租户 文档以理解ABP的多租户系统。本文档重点介绍租户管理模块。

关于ABP SaaS模块

SaaS模块是该模块的另一个实现,提供了更多功能和可能性。它作为ABP订阅的一部分进行分发。

如何安装

当您使用ABP创建新解决方案时,此模块已作为预安装包(NuGet/NPM包)包含在内。您可以继续将其作为包使用并轻松获取更新,或者将其源代码集成到您的解决方案中(请参见get-source CLI命令),以便开发自定义模块。

源代码

该模块的源代码可以在这里访问。源代码采用MIT许可,因此您可以自由使用和定制它。

用户界面

此模块将"管理 -> 租户管理 -> 租户"菜单项添加到应用程序的主菜单中,点击后将打开如下所示页面:

module-tenant-management-page

在此页面中,您可以看到所有租户。您可以创建新租户,如下所示:

module-tenant-management-new-tenant

在此模态框中:

  • 名称:租户的唯一名称。如果您为租户使用子域名(例如<https://some-tenant.your-domain.com),这将是子域名。>
  • 管理员邮箱地址:此租户管理员用户的邮箱地址。
  • 管理员密码:此租户管理员用户的密码。

当您点击租户旁边的操作按钮时,您将看到可执行的操作:

module-tenant-management-actions

管理租户功能

“功能”操作将打开一个模态框,用于为相关租户启用/禁用/设置功能。以下是一个示例模态框:

features-modal

管理宿主功能

如果您的应用程序功能也用于宿主端,则可以使用管理宿主功能按钮来设置宿主端的功能。

分布式事件

此模块定义了以下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

数据库表:

  • AbpTenants
  • AbpTenantConnectionStrings

MongoDB 集成

  • TenantManagementMongoDbContext(实现ITenantManagementMongoDbContext

数据库集合:

  • AbpTenants(也包含连接字符串)

注意事项

ABP允许使用每个租户独立数据库的方法,允许租户拥有专用的数据库。该模块具备了实现此功能的基础设施(参见其源代码),但并未在应用层和UI功能上提供开箱即用的实现。您可以自行实现这些功能,或者考虑使用ABP SaaS模块,该模块完全实现了此功能并提供了更多的业务特性。

另请参阅

在本文档中