Abp.io 的 Identity Server 可以从 URL 更改租户吗?

时间:2021-02-24 14:19:21

标签: abp

我有一个身份服务器模块正在运行(来自 Abp.io)。我激活了多租户模式,现在我有一个模式,我可以通过它更改租户,如下图:enter image description here

2

好的,我的问题是:我想从一个 URL 参数而不是这个模式接收这个租户。我发现 Volo.Abp.AspNetCore.Mvc.UI.MultiTenancy 是提供此开关的模块;和 TenantSwitchModal.cshtml.cs 类是为我们更改此 cookie 的位置。

那么,我必须覆盖 TenantSwitchModal.cshtml.cs 还是有其他方法?

我想可能有一种方法可以让我不需要覆盖 Abp 核心中的任何内容。但我不知道在哪里。有什么帮助吗?

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是 QueryStringTenantResolveContributor

它是 ABP 中可用的默认租户解析器之一,默认启用。

<块引用>

QueryStringTenantResolveContributor:尝试查找当前租户 ID 来自查询字符串参数。参数名称是 __tenant by 默认。

示例查询:

{URL}/Account/Login?__tenant={yourtenantname}

答案 1 :(得分:0)

如果您想通过子域(如mytenant1.mydomain.com)或整个域(如mytenant.com)确定当前租户,您可以配置AbpTenantResolveOptions 添加域租户解析器。

Configure<AbpTenantResolveOptions>(options =>
{
    options.AddDomainTenantResolver("{0}.mydomain.com");
});
  • {0} 是确定当前租户唯一名称的占位符。
  • 将此代码添加到模块的 ConfigureServices 方法中。
  • 这应该在 Web/API 层完成,因为 URL 是与 Web 相关的内容。

您还可以添加自己的租户解析器类。

创建您自己的租户解析器,如下所示:

using System.Threading.Tasks;
using Volo.Abp.MultiTenancy;

namespace MultiTenancyDemo.Web
{
    public class MyCustomTenantResolveContributor : TenantResolveContributorBase
    {
        public override string Name => "Custom";

        public override Task ResolveAsync(ITenantResolveContext context)
        {
            //TODO...
        }
    }
}

在你的模块类中配置

Configure<AbpTenantResolveOptions>(options =>
{
    options.TenantResolvers.Add(new MyCustomTenantResolveContributor());
});

更多信息见https://docs.abp.io/en/abp/latest/Multi-Tenancy