项目

Angular UI 中的多租户功能

ABP Angular UI 支持多租户功能。启动模板中提供了以下与多租户相关的功能。

租户页面

租户页面

在上述页面中,您可以:

  • 查看所有租户
  • 创建新租户
  • 编辑现有租户
  • 删除租户

租户切换组件

租户切换组件

您可以在 MVC 账户公共模块的子页面(如登录页面)中使用租户切换框在现有租户之间切换。Angular UI 从 application-configuration 响应中获取选定的租户,并在每个请求中将租户 ID 作为 __tenant 头发送到后端。

域名/子域名租户解析器

注意: 如果您要执行以下步骤,还应为后端实现域名/子域名租户解析器功能。请参阅多租户文档中的域名/子域名租户解析器章节了解后端实现。

Angular UI 可以从应用运行 URL 中获取租户名称。您可以通过子域名(如 mytenant1.mydomain.com)或完整域名(如 mytenant.com)确定当前租户。为此,您需要在环境中设置 application.baseUrl 属性:

子域名解析器:

// environment.prod.ts

export const environment = {
  //...
  application: {
    baseUrl: "https://{0}.mydomain.com/",
  },
  //...
};

{0} 是用于确定当前租户唯一名称的占位符。

完成上述配置后,如果您的应用运行在 mytenant1.mydomain.com 上,应用将获取租户名称为 mytenant1。然后,应用将调用 /api/abp/multi-tenancy/tenants/by-name/mytenant1 端点来检查租户是否存在。如果租户(mytenant1)存在,应用将保留此租户数据,并在每个请求中将其 id 作为 __tenant 头发送到后端。如果租户不存在,应用将不会向后端发送 __tenant 头。

重要提示: 如果您使用占位符({0})定义了 baseUrl,则 AccountLayoutComponent 子页面(如登录页面)中的租户切换组件将被隐藏。

域名解析器:

// environment.prod.ts

export const environment = {
  //...
  application: {
    baseUrl: "https://{0}.com/",
  },
  //...
};

完成上述配置后,如果您的应用运行在 mytenant.com 上,应用将获取租户名称为 mytenant

租户特定远程端点

可以在环境中的 API URL 中放置 {0} 占位符来确定租户特定端点。

// environment.prod.ts

export const environment = {
  //...
  application: {
    baseUrl: "https://{0}.mydomain.com/",
    //...
  },
  oAuthConfig: {
    issuer: "https://{0}.ids.mydomain.com",
    //...
  },
  apis: {
    default: {
      url: "https://{0}.api.mydomain.com",
    },
    AbpIdentity: {
      url: "https://{0}.identity.mydomain.com",
    },
  },
};

重要提示: 必须设置 application.baseUrlbaseUrl 属性值中的 {0} 占位符才能从运行 URL 中获取租户。API URL 中的其他占位符是可选的。

完成上述配置后,如果您的应用运行在 mytenant1.mydomain.com 上,应用将获取租户名称为 mytenant1,并在应用初始化时替换 EnvironmentService 中的环境对象如下:

// EnvironmentService 中的环境对象

{
  //...
  application: {
    baseUrl: 'https://mytenant1.mydomain.com/',
    //...
  },
  oAuthConfig: {
    issuer: 'https://mytenant1.ids.mydomain.com',
    //...
  },
  apis: {
    default: {
      url: 'https://mytenant1.api.mydomain.com',
    },
    AbpIdentity: {
      url: 'https://mytenant1.identity.mydomain.com',
    },
  },
}

完成此替换后,应用将使用以下 URL:

  • https://mytenant1.ids.mydomain.com 作为认证服务器 URL
  • https://mytenant1.api.mydomain.com 作为默认 URL
  • https://mytenant1.identity.mydomain.com 作为 AbpIdentity 远程端点 URL

应用在每个请求中发送包含当前租户 ID 的 __tenant 头。

处理基于域名的租户未找到情况

当应用初始化且基于域名的租户处于活动状态时,它会发出请求来验证租户。如果找不到该租户,Angular 应用会调用函数。该函数显示错误消息,但可以通过将 TENANT_NOT_FOUND_BY_NAME 令牌注入函数来自定义功能。

示例:

import { TENANT_NOT_FOUND_BY_NAME } from '@abp/ng.core';

export const appConfig: ApplicationConfig = {
  providers: [
     // 为清晰起见已移除
    {
      provide: TENANT_NOT_FOUND_BY_NAME,
      useFactory: function () {
        return () => {
          window.location.replace('https://abp.io');
        };
      },
    },
  ],
};

另请参阅

在本文档中