【愚公系列】2023年02月 WMS智能仓储系统-006.租户功能的配置

举报
愚公搬代码 发表于 2023/02/28 22:46:05 2023/02/28
【摘要】 前言多租户技术(英语:multi-tenancy technology)或称多重租赁技术,是一种软件架构技术,它是在探讨与实现如何于多用户的环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性。多租户简单来说是指一个单独的实例可以为多个组织服务。多租户技术为共用的数据中心内如何以单一系统架构与服务提供多数客户端相同甚至可定制化的服务,并且仍然可以保障客户的数据隔离。一个支持多租...

前言

多租户技术(英语:multi-tenancy technology)或称多重租赁技术,是一种软件架构技术,它是在探讨与实现如何于多用户的环境下共用相同的系统或程序组件,并且仍可确保各用户间数据的隔离性。

多租户简单来说是指一个单独的实例可以为多个组织服务。多租户技术为共用的数据中心内如何以单一系统架构与服务提供多数客户端相同甚至可定制化的服务,并且仍然可以保障客户的数据隔离。一个支持多租户技术的系统需要在设计上对它的数据和配置进行虚拟分区,从而使系统的每个租户或称组织都能够使用一个单独的系统实例,并且每个租户都可以根据自己的需求对租用的系统实例进行个性化配置。

多租户技术可以实现多个租户之间共享系统实例,同时又可以实现租户的系统实例的个性化定制。通过使用多租户技术可以保证系统共性的部分被共享,个性的部分被单独隔离。通过在多个租户之间的资源复用,运营管理维护资源,有效节省开发应用的成本。而且,在租户之间共享应用程序的单个实例,可以实现当应用程序升级时,所有租户可以同时升级。同时,因为多个租户共享一份系统的核心代码,因此当系统升级时,只需要升级相同的核心代码即可。

多租户之间的资源隔离是非常基本的功能

  • 共享一套基础设施资源,但数据隔离
    在这里插入图片描述

一、租户功能的配置

1.注入租户类

#region 多租户的配置
services.AddScoped<MultiTenancy.ITenantProvider, MultiTenancy.TenantProvider>();
#endregion

在这里插入图片描述

2.相关类说明

1、用于存储租户信息的基础类

/// <summary>
/// Tenant Class
/// </summary>
public class Tenant
{
    /// <summary>
    /// tenant's id
    /// </summary>
    public byte tenant_id { get; set; } = 1;
    /// <summary>
    /// tenant's name
    /// </summary>
    public string tenant_name { get; set; } = "default";
}

2、负责解析信息的租户代理类

/// <summary>
/// TenantProvider
/// </summary>
public interface ITenantProvider
{
    /// <summary>
    /// Get Current User's TenantID
    /// </summary>
    /// <returns></returns>
    byte GetCurrentTenantID();
}
/// <summary>
/// TenantProvider
/// </summary>
public class TenantProvider:ITenantProvider
{
    /// <summary>
    /// Tenant
    /// </summary>
    private readonly Tenant tenant;
    /// <summary>
    /// TenantProvider
    /// </summary>
    /// <param name="accessor">注入IHttpContextAccessor</param>
    public TenantProvider(IHttpContextAccessor accessor)
    {
        if (accessor.HttpContext != null)
        {
            var headers = accessor.HttpContext.Request.Headers;
            if (headers != null && headers.Count > 0
                && headers.ContainsKey("TenantName"))
            {
                //可以获取租户信息进行权限设计
                var name = headers["TenantName"].FirstOrDefault();
            }
        }
        //Default Value
        tenant = new Tenant();
    }

    /// <summary>
    /// Get Current User's TenantID
    /// </summary>
    /// <returns></returns>
    public byte GetCurrentTenantID()
    {
        return tenant.tenant_id;
    }
}

在这里插入图片描述
3、使用

/// <summary>
/// Home controller
/// </summary>
[Route("Home")]
[ApiController]
[ApiExplorerSettings(GroupName = "Base")]
public class HomeController : BaseController
{
    private TenantProvider _tenantProvider;
    public HomeController(TenantProvider tenantProvider)
    {
        _tenantProvider = tenantProvider;
    }
    [HttpGet]
    public async Task<IActionResult> GetAsync()
    {
        var id=_tenantProvider.GetCurrentTenantID();
        return Ok();
    }
}

在这里插入图片描述
访问接口,可以看到拿到了默认ID
在这里插入图片描述

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。