高度なカスタマイズ > ビジネスロジックのカスタマイズ > セキュリティラベルのカスタマイズ > セキュリティラベルのカスタマイズ > カスタムセキュリティラベルの設定 > カスタムセキュリティラベルの有効化 > AccessControlSurrogate の処理
  
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 を使用してこの状態を評価できます。