访问权限修饰符
访问权限修饰符是 ThingWorx 9.5 中引入的新概念,开发人员可通过此类修饰符识别那些不受外部使用的构件 (实体及其特征),以及可供最终用户进一步自定义或开发 (包括扩展、参考和重用) 的构件。也可在保护某些特征的前提下开放实体以供外部使用。
当访问权限可供使用时,不允许通过运行时检查访问受保护的构件。大多数正式定义的关系均在创作时予以验证。但服务和混搭代码块内的使用情况仅在运行时验证。运行时检查不可能毫无错误,因此应将其视为避免不当使用的辅助措施。事实来源仍以访问权限修饰符声明为准,开发人员应予以遵守,不使用违反访问权限修饰符声明的相关受保护构件。此类受保护构件可能会被更改或移除,任何违反性依存使用关系均可能在未来任何时间结束且无任何事先通知。
访问权限修饰符可指定实体和特征的可访问性范围。
在 ThingWorx 9.5.0 中,以下实体和特征支持访问权限修饰符:
实体
特征
事物
事物模板
事物形态
事物组
数据形状
网络
工业连接
集成连接器
计划程序
计时器
仪表板
菜单
介质
样式定义
样式主题
状态定义
数据表
值流
博客
Wiki
* 
所有扩展实体类也支持访问权限修饰符。
属性
服务
配置表
* 
其他特征从实体继承访问权限修饰符。
以下实体不支持访问权限修饰符:
项目
模型标记
通知
数据标记
持久化方案提供工具
用户组
用户
组织
应用程序密钥
目录服务
身份验证器
混搭
混搭模板
主数据
小工具
本地化表
访问权限修饰符可分为以下几类:
NONE - 无范围将被视为公共范围,并可用于实体或特征。所有人都可访问公共范围的实体或特征。
所有人均可访问具有 NONE 范围的实体。
具有 NONE 范围的特征从其所属的实体继承访问权限修饰符。
专用 - 此范围可应用于实体或特征,且只能在项目内访问。
受限 - 此范围可应用于实体或特征。它可作为专用范围,将具有名称空间及其子层级结构的项目添加到可访问列表中。例如,ptc.dpm.jobOrder 名称空间和子名称空间的所有实体均可访问 RESTRICTED[ptc.dpm.jobOrder],但其对于所有其他实体而言为专用范围。
* 
在 ThingWorx 9.5.0 中,只能为受限范围添加一个名称空间 (外加多个隐式子名称空间)。
内部 - 此范围只能应用于特征,此类特征只能在实体内访问。
* 
系统将为实体和特征持久存储范围分配。
可将范围应用至所有受支持的实体,而无论实体的项目类型如何。如果未给项目分配名称空间,则只能为实体分配“无”或“专用”范围,为特征分配“无”、“专用”或“内部”。
* 
迁移到 ThingWorx 9.5 后,所有实体和特征均将具有 NONE (无) 范围。
特征级别的范围不能比实体级别更广。例如,如果实体范围为“专用”,则特征范围不能为“无”。
对于与具有 NONE 范围的实体相关联的对象,特征级别允许的RESTRICTED 列表中的对象范围必须更大、更小或相等。对于具有其他范围的实体,特征级别允许的受限列表中的对象范围必须相等或更小。
范围创建要求
范围只能包含大写字母。
配置构建基块项目的默认范围
默认范围可在项目的构建基块类型上配置。创建新实体时,此配置将用作范围的默认分配。
项目的默认范围可在运行时通过 Composer 或 REST 调用予以更新。在此项目中创建的新实体将继承此范围。现有实体的范围不受此配置更改的影响。可在运行时更改实体范围。
* 
此配置仅适用于使用 Composer 创建实体时的范围设置
为实体或特征设置访问权限修饰符
可通过以下方式将访问权限修饰符分配给实体或特征:
通过从 Composer“常规信息”选项卡上的“范围”列表中选择范围。
通过使用 Java 注释
通过 XML 或扩展导入。
通过执行 EntityServices 资源下的 SetAccessModifier 服务。此服务可用于批量设置多个实体和特征的访问权限修饰符。
* 
在 ThingWorx 9.5.0 中,不支持通过 EntityServices 资源中的创建服务调用设置访问修饰符。例如,CreateThingCreateThingShapeCreateNetwork 等创建服务不接受将访问权限修饰符用作自变量。
* 
创建实体时,不会在审计日志中记录访问权限修饰符。
* 
可通过 Java 注释将访问权限修饰符添加至特征。然而,在实体级别添加访问权限修饰符时不支持使用注释。此时可通过 XML 导入在实体级别添加访问权限修饰符。
查看实体或特征上的访问权限修饰符
通过执行 EntityServices 资源下的 GetAspects 服务,可查看针对任何实体或特征设置的访问权限修饰符。
通过访问权限修饰符筛选实体
可在 Composer 中使用 基于范围筛选实体。
记录访问权限修饰符
如果用户创建、更新或删除针对实体或特征设置的访问权限修饰符,则“审计日志”中会留有相关审计记录。。
有关信息,请参阅审计子系统
* 
通过其他实体、成员或服务调用对实体或特征所进行的修改不会纳入审计范围。
将实体从一个项目移至另一个项目
在项目间移动实体时,如果源实体或特征范围为“无”或“专用”,则实体、属性、服务和配置表的范围保持不变。
* 
与目标项目名称空间相同,或范围大于目标项目名称空间的名称空间为有效名称空间。
与目标项目名称空间不同,或范围小于目标项目名称空间的名称空间为无效名称空间。
下面列出了将具有受限范围的实体从一个名称空间移至另一个名称空间时发生的不同情况:
情景 1
如果实体具有有效的名称空间,则范围不会发生更改。
例如,将具有 RESTRICTED [dpm.sco.jobOrder] 范围的实体移至具有 (dpm.sco.jobOrder.scp.jobOrder12) 名称空间的项目时,实体的范围保持不变。
情景 2
如果实体具有无效的名称空间且目标项目无默认范围,则该实体的范围将更改为专用。
例如:
将具有 RESTRICTED[dpm.sco.jobOrder.scp.jobOrder12] 范围的事物移至具有 (abc.xyz.pqr) 名称空间的项目时,事物的范围将更改为 PRIVATE[abc.xyz.pqr]
情景 3
如果实体具有无效的名称空间且目标项目具有带 exmptList 的默认受限范围,则实体的范围将更改为目标项目的默认范围。
例如:
将具有 RESTRICTED[dpm.sco.jobOrder.scp.jobOrder12] 范围的事物移至具有 RESTRICTED[abc.xyz.pqr] 默认范围的项目时,事物的范围将更改为 RESTRICTED[abc.xyz.pqr]
将具有 RESTRICTED[dpm.sco.jobOrder.scp.jobOrder12] 范围的事物移至具有 RESTRICTED[dpm.sco.jobOrder] 默认范围的项目时,事物的范围将更改为 RESTRICTED[dpm.sco.jobOrder.scp.jobOrder12]
情景 4
如果实体具有无效的名称空间且目标项目的默认范围为专用,则实体的范围将更改为目标项目的默认范围。
例如:
将具有 RESTRICTED[dpm.sco.jobOrder.scp.jobOrder12] 范围的事物移至具有 PRIVATE[dpm.sco.jobOrder] 默认范围的项目时,事物的范围将更改为 PRIVATE[dpm.sco.jobOrder]
将具有 RESTRICTED[dpm.sco.jobOrder.scp.jobOrder12] 范围的事物移至具有 PRIVATE[abc.xyz.pqr] 默认范围的项目时,事物的范围将更改为 PRIVATE[abc.xyz.pqr]
情景 5
如果实体具有无效的名称空间且目标项目无名称空间,则该实体的范围将更改为专用。
例如,将具有 RESTRICTED [dpm.sco.jobOrder.scp.jobOrder12] 范围的事物移至无名称空间的项目时,事物的范围将更改为 PRIVATE
* 
如果实体级别的 RESTRICTED 发生更改且特征 RESTRICTED 无效,则特征范围将更改为已继承。
* 
应用程序日志将移动图元记录为“调试”
访问权限修饰符的限制
以下为访问权限修饰符的限制。
新建服务或编辑现有服务时,“本实体/实体”部分不会显示继承的特征。
创建属性绑定时,会显示另一项目的专用属性。
混搭不具有访问权限修饰符。
如果实体名称中包含任何特殊字符,并且运行时未执行访问权限修饰符检查,请执行以下步骤:
1. 将名称编码为 Base64 格式。
2. encodedname/b64 格式添加后缀。
3. 像在使用 REST API 时一样,以 twx-referrer-entity 形式传递此值。
如果任何实体名称中包含 validation.properties 文件中提及的字符以外的字符,则运行时不会执行访问权限修饰符检查。可通过配置 validation.properties 文件的方式将字符添加到文件。添加或修改 Validator.HTTPHeaderValue 的值。有关详细信息,请参阅配置 ESAPI 验证器设置
这对您有帮助吗?