オブジェクト・ストアの特権書き込みアクセス権限の設定
システム・レベル・ツール (インポート/エクスポート、移行アプリケーション、統合ツールなど) を実行するユーザーには、システム・レベル・プロパティーを変更するための特権書き込みアクセス権限が必要です。この権限は、明示的に付与される必要があります。
特権書き込みアクセス権限 (AccessRight.PRIVILEGED_WRITE) は、オブジェクト・ストアに対する標準の管理アクセス権限としては含まれていません。選択されたユーザーに、システム・レベル・プロパティーを変更する能力が必要である場合は、特権書き込みアクセス権限を付与するために FileNet® P8 アプリケーションにサポートを含めることができます。
以下のコード例では、あるユーザーに、オブジェクト・ストアへの特権書き込みアクセス権限を付与します。その後、同じユーザーについて、新しく作成されたドキュメント上でシステム・レベル・プロパティーを変更します。
システム・レベル・プロパティーの変更をサポートするアプリケーションは、オブジェクト上でシステム・レベル・プロパティーを最初に変更した特権ユーザーが、その後で同じシステム・レベル・プロパティーを変更しようとした場合に対応する必要があります。コード例では、あるユーザーが Document オブジェクトのシステム・レベル・プロパティーを変更します。その後で、その同じユーザーが Document オブジェクトをフェッチし、同じシステム・レベル・プロパティー値のいずれかを更新しようとした場合は、Save メソッドが Document オブジェクト上で呼び出されると、クライアント側の読み取り専用例外がスローされます。
この例外を回避するには、プロパティー値を更新して Save を呼び出す前に、アプリケーションが Properties インターフェース上の removeFromCache メソッドを呼び出して、ローカル・プロパティー・キャッシュからシステム・レベル・プロパティーを削除する必要があります。 そのコードは、以下の例に含まれていません。
Java の例
// 書き込みアクセス権限を設定
private static void setWriteAccess(
ObjectStore objStore,
String granteeName,
String granteePassword,
String originalCreator,
Date originalCreateDate,
String originalModifier,
Date originalModifyDate)
{
// 新しいアクセス権限オブジェクトを作成する
AccessPermission ap = Factory.AccessPermission.createInstance();
// アクセス権を設定
ap.set_GranteeName(granteeName);
ap.set_AccessType(AccessType.ALLOW);
ap.set_AccessMask(
new Integer(AccessRight.WRITE_ANY_OWNER_AS_INT + AccessRight.REMOVE_OBJECTS_AS_INT +
AccessRight.MODIFY_OBJECTS_AS_INT + AccessRight.STORE_OBJECTS_AS_INT + AccessRight.CONNECT_AS_INT +
AccessRight.WRITE_ACL_AS_INT + AccessRight.READ_ACL_AS_INT + AccessRight.PRIVILEGED_WRITE_AS_INT));
// オブジェクト・ストアのリストに許可の追加
objStore.get_Permissions().add(ap);
// オブジェクト・ストアを許可と共に保存
objStore.save(RefreshMode.REFRESH);
// 新たに許可された、書き込みアクセス特権を持つユーザーで
// ログイン
Connection conn = objStore.getConnection();
Subject sub = UserContext.createSubject(conn, granteeName, granteePassword, "FileNetP8");
UserContext.get().pushSubject(sub);
try
{
// ドキュメント「doc」を作成
Document doc = Factory.Document.createInstance(objStore, "Document");
// 作成されたドキュメント「doc」に対してシステム・レベルのプロパティーを設定
doc.set_Creator(originalCreator);
doc.set_DateCreated(originalCreateDate);
doc.set_LastModifier(originalModifier);
doc.set_DateLastModified(originalModifyDate);
// 必要に応じて、追加のアクションを実行
// ドキュメントを保存
doc.save(RefreshMode.REFRESH);
System.out.println("Document created: " + doc.get_Id());
}
finally
{
UserContext.get().popSubject();
}
}
C# の例
// 書き込みアクセス権限を設定
private static void SetWriteAccess(
IObjectStore objStore,
String granteeName,
String granteePassword,
String originalCreator,
DateTime originalCreateDate,
String originalModifier,
DateTime originalModifyDate)
{
// 新しいアクセス権限オブジェクトを作成する
IAccessPermission ap =
Factory.AccessPermission.CreateInstance();
// アクセス権を設定
ap.GranteeName = granteeName;
ap.AccessType = AccessType.ALLOW;
ap.AccessMask = (int)AccessRight.WRITE_ANY_OWNER + (int)AccessRight.REMOVE_OBJECTS +
(int)AccessRight.MODIFY_OBJECTS + (int)AccessRight.STORE_OBJECTS + (int)AccessRight.CONNECT +
(int)AccessRight.WRITE_ACL + (int)AccessRight.READ_ACL + (int)AccessRight.PRIVILEGED_WRITE;
// 許可を設定
objStore.Permissions.Add(ap);
// オブジェクト・ストアを許可と共に保存
objStore.Save(RefreshMode.REFRESH);
// 新たに許可された、書き込みアクセス特権を持つユーザーでログイン
UsernameToken token = new UsernameToken(granteeName, granteePassword, PasswordOption.SendPlainText);
UserContext.SetThreadSecurityToken(token);
// ドキュメント「doc」を作成
IDocument doc = Factory.Document.CreateInstance(objStore, "Document");
// システム・レベルのプロパティーを設定
doc.Creator = originalCreator;
doc.DateCreated = originalCreateDate;
doc.LastModifier = originalModifier;
doc.DateLastModified = originalModifyDate;
// 必要に応じて、追加のアクションを実行
// ドキュメントを保存
doc.Save(RefreshMode.REFRESH);
Debug.WriteLine("Document created: " + doc.Id);
}