高度なカスタマイズ > ビジネスロジックのカスタマイズ > セキュリティラベルのカスタマイズ > カスタムセキュリティラベルの設定
  
カスタムセキュリティラベルの設定
以降のセクションとともにセキュリティラベルの設定をお読みください。これらのカスタマイズのいずれかまたはすべてを実行できます。
* 
カスタムセキュリティラベルを使用している場合、ユーザーが値を手動で入力可能であれば、カスタムセキュリティラベルの設定時にデフォルトで表示されるテキストフィールドなどを使用して、ユーザーインタフェースに検証を追加してください。ユーザーがユーザーインタフェースに無効な値を入力したかインポートファイルに無効な値が指定されている場合に予期しない値がデータベースに保管されるのを防止するため、カスタムトランスレータクラスによって値を検証してください。
カスタムセキュリティラベルの有効化
カスタムセキュリティラベルを有効化するには、次のステップを実行する必要があります。各ステップの詳細については、セキュリティラベルの設定を参照してください。
1. Define Security Labels - Required
次の行を <Windchill>/wtcustom/wt/access/accessModelRB.rbinfo ファイルに追加します。<DISPLAY_NAME> と <LONG_DESCRIPTION> を除き、スペースが含まれないようにしてください。
WCTYPE|wt.access.SecurityLabeled~SCA|<SECURITY_LABEL>.value=<DISPLAY_NAME>
WCTYPE|wt.access.SecurityLabeled~SCA|<SECURITY_LABEL>.dataType=java.lang.String
WCTYPE|wt.access.SecurityLabeled~SCA|<SECURITY_LABEL>.serverFunction=
com.ptc.core.foundation.security.server.impl.SACFSecurityLabel
WCTYPE|wt.access.SecurityLabeled~SCA|<SECURITY_LABEL>.serverFunction.arg1=
PID{<SECURITY_LABEL>}
WCTYPE|wt.access.SecurityLabeled~SCA|<SECURITY_LABEL>.longDescription=
<LONG_DESCRIPTION>
ここで、
<SECURITY_LABEL> はカスタムセキュリティラベル名です。この値には英数字と下線のみを使用できます。文字列 WCTYPE|wt.access.SecurityLabeled~SCA|<SECURITY_LABEL> は、この設定で後からカスタムセキュリティラベルのエレメント SecurityLabelResourceKey に指定する値です。セキュリティラベルのコンフィギュレーションファイルでエレメント CustomSecurityLabel に指定されている name 属性と <SECURITY_LABEL> の値が必ずしも同じである必要はありませんが、このガイドでは同じ値を使用しています。
* 
セキュリティラベル名はサーバー計算属性 (SCA) として保管されます。各 SCA には一意の名前が必要です。論理属性レポートに現在のすべての SCA のリストが含まれています。このレポートには <Windchill>/netmarkets/jsp/lwcType/logicalAttributesReport.jsp からアクセスできます。
<DISPLAY_NAME> はユーザーインタフェースに表示されるカスタムセキュリティラベルの名前です。
<LONG_DESCRIPTION> はカスタムセキュリティラベルの詳しい説明です。この説明はカスタムセキュリティラベルに自動的に生成される説明 (「セキュリティラベル」テーブルの「セキュリティラベル情報を表示」アイコン をクリック) に表示されます。
* 
カスタムセキュリティラベル値は事前に定義されていないため、カスタムセキュリティラベルの情報ページに表示可能な詳しい説明はありません。カスタムセキュリティラベル値に関する情報はカスタムセキュリティラベルの詳しい説明に含めることができます。
たとえば、例に挙げたカスタムセキュリティラベルを設定するには、ファイルの末尾に次の行を追加します
WCTYPE|wt.access.SecurityLabeled~SCA|THIRD_PARTY_PROPRIETARY.value=
Third Party Proprietary
WCTYPE|wt.access.SecurityLabeled~SCA|THIRD_PARTY_PROPRIETARY.dataType=
java.lang.String
WCTYPE|wt.access.SecurityLabeled~SCA|THIRD_PARTY_PROPRIETARY.serverFunction=
com.ptc.core.foundation.security.server.impl.SACFSecurityLabel
WCTYPE|wt.access.SecurityLabeled~SCA|
THIRD_PARTY_PROPRIETARY.serverFunction.arg1=
PID{THIRD_PARTY_PROPRIETARY}
WCTYPE|wt.access.SecurityLabeled~SCA|THIRD_PARTY_PROPRIETARY.longDescription=
The "Third Party Proprietary" label indicates the business object's level of third party corporate sensitivity.
* 
以下で始まる既存の行を削除したり変更したりしないでください。
WCTYPE|wt.access.SecurityLabeled~SCA|ALL_SECURITY_LABELS
WCTYPE|wt.access.SecurityLabeled~SCA|ALL_STANDARD_SECURITY_LABELS
WCTYPE|wt.access.SecurityLabeled~SCA|ALL_CUSTOM_SECURITY_LABELS
2. Create a Custom Java Evaluator Class - Optional
このステップの詳細については、「カスタム Java エバリュエータクラスの作成」のセクションを参照してください。
3. Create a Custom Java Translator Class - Optional
このステップの詳細については、「カスタム Java トランスレータクラスの作成」のセクションを参照してください。
4. Edit the Security Labels Configuration File - Required
このステップの詳細については、「カスタムセキュリティラベルのセキュリティラベルコンフィギュレーションファイルの編集」のセクションを参照してください。
5. Edit LogicalAttributesSite.xml - Required
このステップの詳細については、「セキュリティラベルの設定」のLogicalAttributesSite.xml の編集を参照してください。
6. Specify Attribute Handler for Label Attribute - Required
windchill シェル内から、各カスタムセキュリティラベルに対して次のコマンドを実行します。
xconfmanager -s wt.services/svc/default/com.ptc.core.command.
server.delegate.io.AbstractAttributeHandler/<CUSTOM_SECURITY_LABEL>/wt.access.SecurityLabeled/
0=com.ptc.core.command.server.delegate.io.
SecurityLabelAttributeHandler/
singleton -t codebase/com/ptc/core/foundation/
FoundationAttributeHandler.properties -p
ここで、<CUSTOM_SECURITY_LABEL> はファイル securityLabelsConfiguration.xml で指定されているカスタムセキュリティラベルの名前です。
たとえば、例に挙げたカスタムセキュリティラベルの場合、次のコマンドを実行します。
xconfmanager -s wt.services/svc/default/com.ptc.core.command. server.delegate.io.AbstractAttributeHandler/THIRD_PARTY_PROPRIETARY /wt.access.SecurityLabeled/0=com.ptc.core.command.server.delegate .io.SecurityLabelAttributeHandler/singleton -t codebase/com/ ptc/core/foundation/FoundationAttributeHandler.properties -p
7. Restart Windchill method servers.
* 
カスタムセキュリティラベルでオブジェクト初期化規則、免除承諾、監査、購読を有効にするには追加のコンフィギュレーションが必要ですが、標準セキュリティラベルとカスタムセキュリティラベルでこのステップは同じです。
これらの追加機能を有効にする方法については、セキュリティラベルの設定を参照してください。
カスタム Java エバリュエータクラスの作成
* 
参加者がセキュリティラベル値によって制限されているかどうかを判別する際や参加者がセキュリティラベル値を修正可能かどうかを判別する際にカスタムエバリュエーションが必要な場合、カスタム Java エバリュエータクラスを使用する必要があります。
カスタム Java エバリュエータクラスを使用して、指定されているセキュリティラベル値によって参加者が制限されているかどうかや、参加者がセキュリティラベル値を修正可能であるかどうかを判別できます。このためには、このクラスによって wt.access.UnrestrictedPrincipalEvaluator クラスを拡張する必要があります。
wt.access.UnrestrictedPrincipalEvaluator クラスには 4 つのメソッドが含まれています。デフォルトの動作が十分でない場合は、これらのメソッドはどれもオーバーライドできます。
boolean isRestrictedBySecurityLabelValue(WTPrincipal principal, String label_name, String label_value) - 参加者、セキュリティラベル、セキュリティラベル値を評価することによって、参加者がそのセキュリティラベル値によって制限されているかどうかを判別します。
このメソッドがオーバーライドされていない場合、そのデフォルトの動作として、セキュリティラベルのコンフィギュレーションファイル内の UFID が評価され、その参加者が UFID によって指定されているユーザーまたは UFID によって指定されているグループまたは組織のメンバーであるかどうかが判別されます。オーバーライドされたメソッドでデフォルトの結果を得るには、super.isRestrictedBySecurityLabelValue(principal, label_name, label_value) の呼び出しをクラスに追加します。
boolean isRestrictedBySecurityLabelValue(WTPrincipal principal, SecurityLabeled object, String label_name, String label_value) - 参加者、オブジェクト、セキュリティラベル、セキュリティラベル値を評価することによって、参加者がそのセキュリティラベル値によって制限されているかどうかを判別します。このオブジェクトは AccessControlSurrogate の場合があります。AccessControlSurrogate は永続可能オブジェクトの代理として機能し、Windchill が完全な永続可能オブジェクトなしでアクセス権を判別する際に必要なすべての属性を含んでいます。AccessControlSurrogate の詳細については、「AccessControlSurrogate の処理」のセクションを参照してください。
このメソッドがオーバーライドされていない場合、そのデフォルトの動作によって、ブールメソッド isRestrictedBySecurityLabelValue(WTPrincipal principal, String label_name, String label_value) が呼び出されます。
boolean isAllowedToModifySecurityLabelValue(WTPrincipal principal, SecurityLabeled object, String label_name, String label_value) - 参加者、セキュリティラベル、セキュリティラベル値、オブジェクトを評価することによって、参加者がそのセキュリティラベル値を修正可能かどうかを判別します。
このメソッドがオーバーライドされていない場合、そのデフォルトの動作として、セキュリティラベルのコンフィギュレーションファイル内の UFID が評価され、その参加者が UFID によって指定されているユーザーまたは UFID によって指定されているグループまたは組織のメンバーであるかどうかが判別されます。オーバーライドされたメソッドでデフォルトの結果を得るには、super.isAllowedToModifySecurityLabelValue(principal, object, label_name, label_value) の呼び出しをクラスに追加します。
WTKeyedHashMap isAllowedToModifySecurityLabelValues(WTPrincipal principal, WTKeyedMap objects_to_security_labels_map) - 参加者が、オブジェクトのコレクション上の指定されたセキュリティラベルと値のペアを修正可能かどうかを判別します。指定されたラベル、値、オブジェクトの組み合わせごとに、別個のブール値の結果が返されます。
このメソッドがオーバーライドされていない場合、デフォルトの動作として、ラベル/値のペアごと、オブジェクトごとに、単一値のエバリュエータ isAllowedToModifySecurityLabelValue が呼び出されます。たとえば、評価のたびに外部システムを個別に照会する必要があるような場合、このデフォルトの動作ではパフォーマンス問題が発生する可能性があります。そこで、カスタムエバリュエータによってこのメソッドをより効率的な実装にオーバーライドできます。たとえば、コールを外部システムと結合したり、結果をキャッシュすることで、繰り返し評価が実行されることを避けます。
カスタム Java エバリュエータクラスの例が <Windchill>/prog_examples/access ディレクトリにあります。使用事例およびこの例を使用するための Windchill の設定については、実装されている各メソッドのカスタム Java エバリュエータクラスの Javadoc を参照してください。
クラスファイルの操作の詳細については、カスタマイズの管理を参照してください。
AccessControlSurrogate の処理
情報に対するユーザーのアクセス権を評価するために Windchill アクセス制御サービスメソッドが呼び出された場合、このメソッドには永続可能オブジェクトまたは wt.access.AccessControlSurrogate が渡されます。AccessControlSurrogate は、完全な永続可能オブジェクトではなくオブジェクトの特定の属性をリクエストするデータベース照会が実行された場合に返された情報に対するアクセス権を評価する際に、永続可能オブジェクトの代理として機能します。surrogate には、これが表しているクラスの属性が含まれ、アクセス制御の決定を行う際に必要なすべての属性が含まれています。
wt.access.UnrestrictedPrincipalEvaluator クラスによって定義されているブールメソッド isRestrictedBySecurityLabelValue(WTPrincipal principal, SecurityLabeled object, String label_name, String label_value)AccessControlSurrogate オブジェクトを渡すことができます。カスタム Java エバリュエータクラス内でこのメソッドをオーバーライドする場合、カスタムコードで、各種属性のチェックを行う前に、そのオブジェクトが AccessControlSurrogate のインスタンスであるかどうかをチェックする必要があります。
wt.fc.ObjectIdentifier メソッド getId() を使用して、表されている永続可能オブジェクトの一意の識別子を取得できます。ObjectIdentifier でのクラス名は wt.access.AccessControlSurrogate です。surrogate の getTargetClassName メソッドを使用して、表されている永続可能オブジェクトのクラス名を取得できます。以下に例を示します。
Class targetClass = Object.class;
if (object instanceof AccessControlSurrogate) {
try {
targetClass = Class.forName(((AccessControlSurrogate)
object).getTargetClassName());
}
catch (ClassNotFoundException cnfe) {
...
}
long id = PersistenceHelper.getObjectIdentifier(object).getId();
}
AccessControlSurrogate で使用可能な属性は、表されている永続可能オブジェクトのタイプと、システムで免除承諾が有効になっているかどうかによって異なります。
次の属性は使用可能であり、アクセスするための API がサポートされています。:
wt.admin.DomainAdministered インタフェースがターゲットクラスのスーパーインタフェースである場合、wt.admin.DomainAdministeredHelper メソッド getAdminDomainRef(DomainAdministered obj) を使用して、オブジェクトのドメイン参照を取得できます。
wt.lifecycle.LifeCycleManaged インタフェースがターゲットクラスのスーパーインタフェースである場合、その getState() メソッドを使用して、オブジェクトのライフサイクル状態を取得できます。
wt.access.SecurityLabeled インタフェースがターゲットクラスのスーパーインタフェースである場合、wt.access.AccessControlManager メソッド getSecurityLabels(SecurityLabeled object) を使用して、オブジェクトのセキュリティラベルとその値のマッピングを取得できます。
SecurityLabeled インタフェースがターゲットクラスのスーパーインタフェースであることに加え、システムで免除承諾が有効になっている場合:
wt.inf.container.WTContained インタフェースがターゲットクラスのスーパーインタフェースである場合、wt.inf.container.WTContainerHelper メソッド getContainer(WTContained contained) を使用して、オブジェクトのコンテキストを取得できます。
wt.vc.Iterated インタフェースがターゲットクラスのスーパーインタフェースである場合、getMasterReference() メソッドを使用して、作業版数のマスターの ObjectReference を取得できます。さらに、wt.vc.VersionControlHelper メソッド getBranchIdentifier(Iterated iteration) を使用して、作業版数のブランチ ID を取得できます。
wt.vc.wip.Workable インタフェースがターゲットクラスのスーパーインタフェースである場合、wt.vc.wip.WorkInProgressHelper メソッド getState(Workable object) を使用して、オブジェクトの進行中の作業状態を取得し、isCheckedOut(Workable object), isReservedWorkingCopy(Workable object)isPrivateWorkingCopy(Workable object) などの API を使用してこの状態を評価できます。
カスタム Java トランスレータクラスの作成
カスタムセキュリティラベルに対してカスタム Java トランスレータクラスを使用することで、内部形式のセキュリティラベル値と外部形式のセキュリティラベル値との間で変換を行うことができます。このためには、このクラスによって wt.access.CustomSecurityLabelValueTranslator クラスを拡張する必要があります。内部形式はアクセス評価時に Windchill によって使用され、データベースに保管されています。外部形式は Windchill インタフェースに表示され、セキュリティラベル値を指定する際にこれをユーザーが入力します。トランスレータクラスが定義されていない場合、外部形式は内部形式と同じであり、データベースに保管されています。
内部形式に追加できるものには一定の制限があります。等号 (=) とコンマ (,) はデータベースに保管できません。ユーザーが入力したセキュリティラベル値でこのいずれかの文字が使用される場合、トランスレータクラスを使用して、これらの文字を内部名から除去する必要があります。同様に、NULL 文字列もデータベースに保管できません。カスタム Java トランスレータクラスを使用して、長いセキュリティラベル値名を使用することもできます。セキュリティラベル属性はデータベース内で 4000 文字に制限されているため、長いセキュリティラベル値を使用すると保存の問題が生じることがあります。カスタムトランスレータクラスを指定することで、Windchill ユーザーインタフェースには外部形式を使用して説明的なラベル値を表示し、データベースには内部形式を使用してユーザーにわかりにくい値を保管できます。ユーザーが指定したラベル値を検証するためのユーザーインタフェースがない場合には特に、カスタムトランスレータクラスを使用して、カスタムセキュリティラベル値を検証することもできます。
wt.access.CustomSecurityLabelValueTranslator クラスには 2 つのメソッドが含まれています。
getExternalValue - 指定された内部値に関連付けられている外部値を返します。
getInternalValue - 指定された外部値に関連付けられている内部値を返します。
次の簡単な例では、規制されているコンマ (,) が除去され、規制されていないプラス記号 (+) に置き換えられています。この例は、外部値にプラス記号 (+) が含まれていないことを前提としています。
public class CustomTranslator implements CustomSecurityLabelValueTranslator {
public String getExternalValue(String label_name, String internal_value)
throws WTException {
return internal_value.replace("+", ",");
}
public String getInternalValue(String label_name, String external_value)
throws WTException {
return external_value.replace(",", "+");
}
}
各メソッドは同じ入力に対して必ず同じ結果を返す必要があります。時間とともに変化する内部値が必要な場合、文字列にバージョン番号を追加してください。たとえば、カスタムセキュリティラベルが取引先のサードパーティの会社を表している場合、各サードパーティが将来事業所を設置する国を追加する必要があります。最初は、1 つの外部値 "Company A" と内部値 "1:A" を使用します。将来、Company A の事業所の場所を表す必要が生じたときに、外部値を "Company A (US)" と "Company A (UK)" に変更できます。これに対応する内部値を "2:A-US" と "2:A-UK" に変更できます。データベースには両方のバージョンが保管されていることがあるため、バージョン番号を使用して、カスタムトランスレータクラスに各バージョンの変換方法を知らせることができます。
クラスファイルの操作の詳細については、カスタマイズの管理を参照してください。
カスタムセキュリティラベルのセキュリティラベルコンフィギュレーションファイルの編集
この情報は、セキュリティラベルの設定セキュリティラベルのコンフィギュレーションファイルを編集する - 必須のステップに関連します。
* 
カスタムセキュリティラベルの使用例が <Windchill>/conf/securityLabelsConfiguration_sample.xml ファイルにあります。このサンプルコンフィギュレーションファイルにはこのドキュメントで使用するサンプルコンフィギュレーションとほぼ同じサンプルデータが含まれていますが、カスタムセキュリティラベルを正常に設定するためには、お使いのシステムで実際に使用されている値を入力する必要があります。
このサンプルコンフィギュレーションの詳細については、セキュリティラベルのサンプルコンフィギュレーションを参照してください。
カスタムセキュリティラベルを有効にするには、各カスタムセキュリティラベルに CustomSecurityLabel エレメントとそのサブエレメントを追加します。終了したら、ファイルを保存して閉じます。
CustomSecurityLabel エレメント
エレメント CustomSecurityLabel には、カスタムセキュリティラベルを定義するためのデータ、そのカスタムセキュリティラベル値の承認された参加者 (すべてのユーザーでない場合)、そのカスタムセキュリティラベル値に関連付けられている免除承諾タイプ (あれば)、カスタムセキュリティラベルを処理するためにアプリケーションとサービスで使用される各種マッピングが含まれています。設定するカスタムセキュリティラベルごとにエレメント CustomSecurityLabel が 1 つ必要です。以下に例を示します。
<CustomSecurityLabel name="THIRD_PARTY_PROPRIETARY" enabled="true">
<SecurityLabelResourceKey>WCTYPE|wt.access.SecurityLabeled~SCA|
THIRD_PARTY_PROPRIETARY</SecurityLabelResourceKey>
<CustomSecurityLabelValues>
<UnrestrictedPrincipal>
<ufid>cn=Employees,cn=Public,ou=people,cn=AdministrativeLdap,
cn=Windchill_10.1,o=ptc|Ldap.ptcnet.ptc.com|
Ldap.ptcnet.ptc.com</ufid>
<evaluatorClass>
com.ourcompany.CustomEvaluator
</evaluatorClass>
</UnrestrictedPrincipal>
<TranslatorClass>
com.ourcompany.CustomTranslator
</TranslatorClass>
</CustomSecurityLabelValues>
<SecurityLabelParameter>THIRD_PARTY_PROPRIETARY
</SecurityLabelParameter>
</CustomSecurityLabel>
エレメント CustomSecurityLabel の属性 name は、データベースに保存されるこのセキュリティラベルの文字列です (この場合は THIRD_PARTY_PROPRIETARY)。Windchill ソリューションでこのカスタムセキュリティラベルを使用するには、属性 enabledtrue に設定する必要があります。通常、この名前値はユーザーインタフェースに表示されません。このセキュリティラベルの表示名は <Windchill>/wtcustom/wt/access/accessModelRB.rbinfo ファイルで事前に定義されています。
* 
エレメント CustomSecurityLabel の名前属性と内部カスタムラベル値はできるだけ短くしてください。エレメント TranslatorClass を使用することで、データベースに保管される内部値のサイズを減らすことができます。詳細については、「カスタム Java トランスレータクラスの作成」のセクションを参照してください。
エレメント SecurityLabelResourceKey はラベルのリソースキーを表し、次のフォーマットで指定されています。
WCTYPE|wt.access.SecurityLabeled~SCA|<SECURITY_LABEL>
ここで、<SECURITY_LABEL> はエレメント CustomSecurityLabelname 属性の値です。先に編集した accessModelRB.rbinfo リソースファイルにこのリソースキーが存在している必要があります。
* 
セキュリティラベルをグローバルに無効化した場合でも、メソッドサーバーが起動するためには、コンフィギュレーションファイルで指定されているセキュリティラベルのリソースキーが accessModelRB.rbInfo に含まれていなければなりません。
セキュリティラベルの無効化については、セキュリティラベルと値の無効化を参照してください。
エレメント CustomSecurityLabelValues はサブエレメント UnrestrictedPrincipal を 1 つ持つことができます。このサブエレメントはこのセキュリティラベル値の承認された参加者を指定します。サブエレメント UnrestrictedPrincipal を省略した場合、すべてのユーザーに、そのカスタムラベル値が適用されているオブジェクトへのアクセスが許可されます。
エレメント UnrestrictedPrincipal にはサブエレメント ufid を指定できます。UFID (Unique Federation Identifier) は参加者 (ユーザー、ユーザー定義グループ、または組織) を指定します。UnrestrictedPrincipal エレメントは「カスタム Java エバリュエータクラスの作成」で作成したエバリュエータクラスを指定する evaluatorClass サブエレメントを持つこともできます。エレメント UnrestrictedPrincipal でサブエレメント ufid とサブエレメント evaluatorClass のいずれかまたは両方を使用できます。ufid サブエレメント、evaluatorClass サブエレメント、またはその両方を使用する際の差分については、カスタムセキュリティラベルの承認された参加者の指定を参照してください。
エレメント UnrestrictedPrincipal にはサブエレメント AgreementType を指定することもできます。免除承諾を使用することで、このセキュリティラベル値の "承認された参加者" でないユーザーに一時的にアクセスを許可できます。エレメント AgreementType の内容は次のフォーマットで指定します。
<logicalTypeId><AGREEMENT_NAME></logicalTypeId>
ここで、<AGREEMENT_NAME> は承諾タイプまたはサブタイプの内部名です。
オプションの TranslatorClass エレメントは、「カスタム Java トランスレータクラスの作成」のセクションで作成したクラスを指定します。エレメント TranslatorClass は、セキュリティラベル値の内部名と Windchill 全体に表示される外部名との間で変換を行います。エレメント TranslatorClass が指定されていない場合、カスタムセキュリティラベル値の内部値と外部値は同じです。
オプションのエレメント SecurityLabelParameter には、各種オーサリングアプリケーションでファイル属性として使用され、このカスタムセキュリティラベルにマップされるパラメータ名が含まれています。エレメント SecurityLabelParameter は、必ずエレメント CustomSecurityLabel 内の一番最後に指定します。このパラメータ名は、オーサリングアプリケーションで採用されているパラメータ名の規約に従う必要があります。