通过xDM-F的多租户能力实现应用运行态数据的逻辑隔离
操作场景
假设A公司在工业数字模型驱动引擎(Industrial Digital Model Engine,简称iDME)开发了一个应用(PDM),希望将该应用授权给B公司和C公司使用,且两个公司之间的数据不互通。此时,用户可以通过iDME应用提供的多租户能力,创建多个租户,为B公司和C公司的数据进行逻辑隔离。
前提条件
已登录应用运行态。
步骤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:逻辑隔离租户数据的创建单位类型为示例进行验证。
- 通过可视化页面方式验证。
- 在应用运行态的右上方,单击租户的下拉列表,选择“tenantB”。
- 在左侧导航栏中,选择“计量单位”页面。
该页面下存在“UnitTest”的数据。
,进入 - 在应用运行态的右上方,单击租户的下拉列表,选择“tenantC”。
- 在左侧导航栏中,选择“计量单位”页面。
该页面下无“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”租户下创建的单位类型。
- 发送请求头带有“tenantid”为“tenantB”的查询请求。