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.baseUrl和baseUrl属性值中的{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作为认证服务器 URLhttps://mytenant1.api.mydomain.com作为默认 URLhttps://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');
};
},
},
],
};
抠丁客




