アクセス修飾子
アクセス修飾子は、ThingWorx 9.5 で導入された新しい構成概念であり、これによって、開発者は外部使用から保護されている成果物 (エンティティとその特性)、およびエンドユーザーがさらなるカスタマイズまたは開発 (拡張、参照、再使用など) のために消費できる成果物を識別できます。保護されている特性の一部とともに外部で使用するためにエンティティを開くこともできます。
保護されている成果物は、アクセスが使用可能になったときでも、ランタイムチェックを介してアクセスできません。正式に定義されている関係のほとんどが作成時に検証されます。ただし、サービスとマッシュアップのコードブロック内での使用はランタイムでのみ検証されます。ランタイムチェックは、完全にエラーなしで行うことができないため、不適切な使用を避けるための補助として扱ってください。アクセス修飾子の宣言は真実のソースのままを維持し、開発者は、保護されている当該成果物を使用しないことで、宣言されているアクセス修飾子に違反しないようにとどまる必要があります。このような保護されている成果物は変更または除去される可能性があり、これらの成果物に依存する使用に違反すると、将来通知なしに失敗するようになる場合があります。
アクセス修飾子は、エンティティと特性のアクセシビリティの範囲を指定します。
ThingWorx 9.5.0 では、アクセス修飾子は以下のエンティティと特性でサポートされています。
エンティティ
特性
Thing
Thing Template
Thing Shape
Thing Group
データシェイプ
ネットワーク
インダストリアル接続
統合コネクタ
スケジューラ
タイマー
ダッシュボード
メニュー
メディア
スタイル定義
スタイルテーマ
状態定義
データテーブル
ストリーム
値ストリーム
ブログ
Wiki
* 
エンティティを拡張するすべてのクラスもアクセス修飾子をサポートしています。
プロパティ
サービス
コンフィギュレーションテーブル
* 
その他の特性はエンティティからアクセス修飾子を継承します。
以下のエンティティはアクセス修飾子をサポートしていません。
プロジェクト
モデルタグ
通知
データタグ
永続化プロバイダ
ユーザーグループ
ユーザー
組織
アプリケーションキー
ディレクトリサービス
認証システム
マッシュアップ
マッシュアップテンプレート
マスター
ガジェット
ローカライズテーブル
アクセス修飾子は次のように分類されます。
NONE - 範囲の不在は、パブリック範囲として扱われ、エンティティまたは特性に適用できます。パブリック範囲のエンティティまたは特性にはすべてのユーザーがアクセスできます。
NONE 範囲のエンティティにはすべてのユーザーがアクセスできます。
NONE 範囲の特性は、それが属するエンティティからアクセス修飾子を継承します。
PRIVATE - この範囲はエンティティまたは特性に適用でき、プロジェクト内でのみアクセスできます。
RESTRICTED - この範囲はエンティティまたは特性に適用できます。これは名前空間とその子階層があるプロジェクトをアクセス可能なリストに追加するプライベート範囲として機能します。たとえば、RESTRICTED[ptc.dpm.jobOrder]ptc.dpm.jobOrder 名前空間と子名前空間のすべてのエンティティに対してはアクセス可能ですが、その他すべてのエンティティに対してはプライベートです。
* 
ThingWorx 9.5.0 では、制限範囲に追加できる名前空間 (および暗黙的な子名前空間) は 1 つだけです。
「内部」 - この範囲は特性にのみ適用でき、そのような特性にはそのエンティティ内でのみアクセスできます。
* 
エンティティと特性に対する範囲の割当は永続化されます。
範囲は、プロジェクトタイプに関係なく、サポートされているすべてのエンティティに適用できます。プロジェクトに名前空間が割り当てられていない場合、エンティティに適用できる範囲は「なし」または「プライベート」のみであり、特性に適用できる範囲は「なし」、「プライベート」、または「内部」のみです。
* 
ThingWorx 9.5 に移行した後、すべてのエンティティと特性に NONE (不在) 範囲が割り当てられます。
特性レベルに広い範囲を割り当てることはできません。たとえば、エンティティの範囲が PRIVATE である場合に、特性の範囲を NONE にすることはできません。
範囲が NONE のエンティティに関連付けられているオブジェクトの場合、特性レベルで許可される RESTRICTED リストのオブジェクトの範囲は、より広いか、等しいか、より狭くなければなりません。その他の範囲のエンティティの場合、特性レベルで許可される RESTRICTED リストのオブジェクトの範囲は、等しいか、狭くなければなりません。
範囲を作成するための要件
範囲には大文字のみを含める必要があります。
構築ブロックプロジェクトのデフォルト範囲の設定
デフォルトの範囲は、構築ブロックタイプのプロジェクトで設定できます。新規エンティティを作成するとき、このコンフィギュレーションが、範囲のデフォルトの割当として使用されます。
プロジェクトのデフォルトの範囲は、Composer または REST 呼び出しを介してランタイムで更新できます。このプロジェクトで作成される新規エンティティは、この範囲を継承します。既存のエンティティの範囲は、このコンフィギュレーションの変更の影響を受けません。エンティティの範囲はランタイムで変更できます。
* 
このコンフィギュレーションは、Composer を使用してエンティティを作成するときの範囲設定にのみ適用されます。
エンティティまたは特性のアクセス修飾子の設定
アクセス修飾子は、以下の方法でエンティティまたは特性に割り当てることができます。
Composer の「一般情報」タブの「範囲」リストから範囲を選択する。
Java アノテーションを使用する。
XML または拡張機能のインポートを使用する。
EntityServices リソースで SetAccessModifier サービスを実行する。このサービスを使用すると、複数のエンティティおよび特性のアクセス修飾子を一括して設定できます。
* 
ThingWorx 9.5.0 では、EntityServices リソース内の作成サービス呼び出しからアクセス修飾子を設定することはできません。たとえば、CreateThingCreateThingShapeCreateNetwork などの作成サービスは、アクセス修飾子を引数として受け入れません。
* 
エンティティの作成中、アクセス修飾子は監査ログに記録されません。
* 
アクセス修飾子は Java アノテーションを介して特性に追加できます。ただし、アノテーションではエンティティレベルでのアクセス修飾子の追加はサポートされていません。エンティティレベルでのアクセス修飾子の追加は XML インポートを介して行うことができます。
エンティティまたは特性で設定されているアクセス修飾子の確認
EntityServices リソースで GetAspects サービスを実行することにより、エンティティまたは特性に対して設定されているアクセス修飾子を確認できます。
アクセス修飾子によるエンティティのフィルタ
Composer で を使用することにより、範囲に基づいてエンティティをフィルタできます。
アクセス修飾子のログ
ユーザーがエンティティまたは特性に対修正して設定されているアクセス修飾子を作成、更新、または削除すると、その監査が「監査ログ」で維持されます。
詳細については、監査サブシステムを参照してください。
* 
別のエンティティ、メンバー、またはサービス呼び出しによるエンティティまたは特性の修正は監査されません。
1 つのプロジェクトから別のプロジェクトへのエンティティの移動
プロジェクト間でエンティティを移動するとき、ソースエンティティまたは特性の範囲が「なし」または「プライベート」である場合、エンティティ、プロパティ、サービス、およびコンフィギュレーションテーブルの範囲は変更されません。
* 
ターゲットプロジェクトの名前空間と同じ、またはそれよりも広い名前空間は、有効な名前空間です。
ターゲットプロジェクトの名前空間とは異なる、またはそれよりも狭い名前空間は、無効な名前空間です。
範囲が「制限」であるエンティティを 1 つの名前空間から別の名前空間へ移動する際に発生するシナリオをいくつか以下に示します。
シナリオ 1
エンティティに有効な名前空間がある場合、範囲に変更はありません。
たとえば、範囲が RESTRICTED [dpm.sco.jobOrder] のエンティティを名前空間が (dpm.sco.jobOrder.scp.jobOrder12) のプロジェクトに移動した場合、エンティティの範囲は同じままです。
シナリオ 2
エンティティに無効な名前空間があり、ターゲットプロジェクトにデフォルトの範囲がない場合、エンティティの範囲は「プライベート」に変わります。
例:
範囲が RESTRICTED[dpm.sco.jobOrder.scp.jobOrder12] の Thing を名前空間が (abc.xyz.pqr) のプロジェクトに移動した場合、Thing の範囲は PRIVATE[abc.xyz.pqr] に変わります。
シナリオ 3
エンティティに無効な名前空間があり、ターゲットプロジェクトのデフォルトの範囲が exmptList 付きの「制限」である場合、エンティティの範囲はターゲットプロジェクトのデフォルトの範囲に変わります。
例:
範囲が RESTRICTED[dpm.sco.jobOrder.scp.jobOrder12] の Thing をデフォルト範囲が RESTRICTED[abc.xyz.pqr] のプロジェクトに移動した場合、Thing の範囲は RESTRICTED[abc.xyz.pqr] に変わります。
範囲が RESTRICTED[dpm.sco.jobOrder.scp.jobOrder12] の Thing をデフォルト範囲が RESTRICTED[dpm.sco.jobOrder] のプロジェクトに移動した場合、Thing の範囲は RESTRICTED[dpm.sco.jobOrder.scp.jobOrder12] に変わります。
シナリオ 4
エンティティに無効な名前空間があり、ターゲットプロジェクトのデフォルトの範囲が「プライベート」である場合、エンティティの範囲はターゲットプロジェクトのデフォルトの範囲に変わります。
例:
範囲が RESTRICTED[dpm.sco.jobOrder.scp.jobOrder12] の Thing をデフォルト範囲が PRIVATE[dpm.sco.jobOrder] のプロジェクトに移動した場合、Thing の範囲は PRIVATE[dpm.sco.jobOrder] に変わります。
範囲が RESTRICTED[dpm.sco.jobOrder.scp.jobOrder12] の Thing をデフォルト範囲が PRIVATE[abc.xyz.pqr] のプロジェクトに移動した場合、Thing の範囲は PRIVATE[abc.xyz.pqr] に変わります。
シナリオ 5
エンティティに無効な名前空間があり、ターゲットプロジェクトに名前空間がない場合、エンティティの範囲は「プライベート」に変わります。
たとえば、範囲が RESTRICTED [dpm.sco.jobOrder.scp.jobOrder12] の Thing を名前空間がないプロジェクトに移動した場合、Thing の範囲は PRIVATE に変わります。
* 
RESTRICTED がエンティティレベルで変更され、特性 RESTRICTED が無効である場合、特性の範囲は Inherited に変わります。
* 
エンティティの移動はアプリケーションログに「デバッグ」として記録されます。
アクセス修飾子の制限事項
アクセス修飾子の制限事項を以下に示します。
新規サービスの作成中や既存のサービスの編集中に、継承された特性が「自分/エンティティ」セクションに表示されません。
プロパティのバインドの作成中に、別のプロジェクトの「プライベート」プロパティが表示されます。
マッシュアップにはアクセス修飾子がありません。
エンティティ名に特殊文字が含まれており、ランタイムでアクセス修飾子チェックが実行されていない場合は、以下の手順に従います。
1. 名前を Base64 フォーマットでエンコードします。
2. <エンコードされた名前>/b64 というフォーマットで接尾辞を追加します。
3. REST API の使用中にこの値を twx-referrer-entity として渡します。
validation.properties ファイルに記述されているもの以外の文字がエンティティ名に含まれている場合、ランタイムでアクセス修飾子チェックは実行されません。validation.properties ファイルを設定することでこのファイルに文字を追加できます。Validator.HTTPHeaderValue の値を追加または修正します。詳細については、ESAPI バリデータの設定を参照してください。
これは役に立ちましたか?