文档首页/ 工业数字模型驱动引擎/ 最佳实践/ 通过xDM-F的多租户能力实现应用运行态数据的逻辑隔离
更新时间:2024-07-31 GMT+08:00
分享

通过xDM-F的多租户能力实现应用运行态数据的逻辑隔离

操作场景

假设A公司在工业数字模型驱动引擎(Industrial Digital Model Engine,简称iDME)开发了一个应用(PDM),希望将该应用授权给B公司和C公司使用,且两个公司之间的数据不互通。此时,用户可以通过iDME应用提供的多租户能力,创建多个租户,为B公司和C公司的数据进行逻辑隔离。

前提条件

登录应用运行态

步骤1:创建租户

创建两个租户实例,租户编码分别为tenantB和tenantC。具体操作请参见租户管理
图1 租户实例

步骤2:逻辑隔离租户数据

  • 可视化页面:在应用运行态的右上方,单击租户的下拉列表,切换为tenantB或tenantC。即可在tenantB和tenantC租户下,分别管理B公司和C公司在PDM应用下的模型数据。例如,创建扩展模型的数据实体创建数据实例创建扩展属性等。
    图2 切换租户
  • API方式:在待调用的API中为B公司和C公司添加“tenantid”必填参数。即,当B公司或者C公司对PDM应用进行增删改查操作时,发送的请求头必须带有tenantid。

    请求头:

    POST http://{Endpoint}/rdm_{appID}_app/services/dynamic/api/{entityName}/{method}
    Content-Type: Application/Json
    Content-Length: Content Length
    X-AUTH-TOKEN: Token ID
    tenantid: 租户编
    
    {
        "params": {
            "id": "唯一编码",
            ......
        }
    }

    其中,{Endpoint}表示数据建模引擎所在域名或IP地址,{appID}表示应用ID,{entityName}表示实体的英文名称,{method}表示请求方法。

    以在tenantB租户下创建单位类型为例,其请求示例如下:

    POST http://dme.cn-north-4.huaweicloud.com/rdm_01a2b2c4764d4e00f123g345fd9baa9f_app/services/dynamic/api/UnitType/create
    Content-Type: Application/Json
    Content-Length: Content Length
    X-AUTH-TOKEN: XXXXXXXXXX
    tenantid: tenantB
    
    {
        "params": {
            "id": "439166695949471744",
            "nameEn": "UnitTest",
            "name": "UnitTest",
            "descriptionEn": "",
            "descriptionCn": "",
            "unitGbFlag": true
        }
    }

步骤3:隔离验证

如下操作以步骤2:逻辑隔离租户数据的创建单位类型为示例进行验证。

  • 通过可视化页面方式验证。
    1. 应用运行态的右上方,单击租户的下拉列表,选择“tenantB”
    2. 在左侧导航栏中,选择基础数据管理 > 计量单位,进入“计量单位”页面。

      该页面下存在“UnitTest”的数据。

    3. 应用运行态的右上方,单击租户的下拉列表,选择“tenantC”
    4. 在左侧导航栏中,选择基础数据管理 > 计量单位,进入“计量单位”页面。

      该页面下无“UnitTest”的数据。

  • 通过API方式调用单位类型的查询接口验证。
    • 发送请求头带有“tenantid”“tenantB”的查询请求。
      POST http://dme.cn-north-4.huaweicloud.com/rdm_01a2b2c4764d4e00f123g345fd9baa9f_app/services/dynamic/api/UnitType/find/20/1 
      Content-Type: Application/Json 
      Content-Length: Content Length 
      X-AUTH-TOKEN: XXXXXXXXXX 
      tenantid: tenantB 
       
      { 
          "params": { 
              "sort": "DESC",
              "orderBy": "lastUpdateTime",
              "filter": {
                  "joiner":"string",
                  "conditions": []
              },
              "isNeedTotal": true
          } 
      }

      可查询到在“tenantB”租户下创建的单位类型。

    • 发送请求头带有“tenantid”“tenantC”的查询请求。
      POST http://dme.cn-north-4.huaweicloud.com/rdm_01a2b2c4764d4e00f123g345fd9baa9f_app/services/dynamic/api/UnitType/find/20/1 
      Content-Type: Application/Json 
      Content-Length: Content Length 
      X-AUTH-TOKEN: XXXXXXXXXX 
      tenantid: tenantC 
       
      { 
          "params": { 
              "sort": "DESC",
              "orderBy": "lastUpdateTime",
              "filter": {
                  "joiner":"string",
                  "conditions": []
              },
              "isNeedTotal": true
          } 
      }

      查询不到在“tenantB”租户下创建的单位类型。

相关文档