アクセス制御機能を使用するため,アクセス制御情報を操作する場合に使用するメソッドと,そのメソッドの発行順序の例を説明します。
ここでは,次の操作について説明します。
なお,これらの操作を実行する前に,まず,文書空間と接続してトランザクションを開始してください。
それぞれの操作に使用するメソッドの詳細については,マニュアル「DocumentBroker Version 3 クラスライブラリ C++ リファレンス 基本機能編」を参照してください。
ACFlagは,クラスライブラリのオブジェクトのプロパティである,dbrProp_OwnerPermissionプロパティ,dbrProp_PrimaryGroupPermissionプロパティおよびdbrProp_EveryonePermissionプロパティとして設定します。これらの設定方法は,ほかのプロパティの設定方法と同じです。プロパティの設定については,「2.6.6 プロパティの操作」を参照してください。
ただし,ACFlagが設定できるのは,設定しようとしているクラスライブラリのオブジェクトの所有者,セキュリティACLに登録されているユーザまたはセキュリティ管理者だけです。
ACEは,可変長配列の個々の要素を表すCdbrCompoundクラスのオブジェクトのプロパティとして設定します。それぞれ,サブジェクトをdbrProp_Subjectプロパティに,サブジェクト種別をdbrProp_SubjectTypeプロパティに,パーミッションをdbrProp_Permissionプロパティに設定します。
ACLは可変長配列を表すVariableArray型プロパティです。CdbrVariableArrayクラスのオブジェクトとして作成します。
ここでは,CdbrDocumentオブジェクトとして作成した文書に対して,USER_Aというユーザ識別子を持つユーザに参照更新権を設定する場合について説明します。
ACE,ACLを作成して,オブジェクトのローカルACLとして設定するコールシーケンスの例を次に示します。
// 変数DocumentはCdbrDocumentクラスから作成した文書
SDBR_PROP Prop;
SDBR_PROPLIST PropList;
Dmapv pObj;
CdbrCompound ACE;
CdbrVariableArray ACL(DBR_DATATYPE_COMPOUND);
pSession->Begin();
Document.SetOIID(pSession, pOIID);
// ACEにサブジェクト,サブジェクト種別およびパーミッションを設定する
ACE.SetValue(&dbrProp_Subject, "USER_A");
ACE.SetValue(&dbrProp_SubjectType, DBR_SUBJECTTYPE_USR);
ACE.SetValue(&dbrProp_Permission, DBR_PERM_READ_WRITE);
// ACLの要素数を1にして,ACEをACLに格納する
ACL.Resize(1);
ACL.SetValue(0,ACE);
// ACLをプロパティ構造体に設定する
Prop.PropId = dbrProp_ACL;
Prop.lType = DMA_DATATYPE_OBJECT;
Prop.lCardinality = EDM_DMA_CARDINALITY_VARRAY;
Prop.lCount = 1;
pObj = &ACL;
Prop.uniValue.ppObject = &pObj;
// プロパティ構造体の値(=ACL)をDMAオブジェクトに設定する
PropList.pItem = &Prop;
PropList.lCount = 1;
Document.PutPropertyValues(&PropList);
Document.ReleaseObject();
pSession->Commit();
VariableArray型プロパティであるACLを文書またはコンテナのローカルACLに設定する場合は,PutPropertyValuesメソッドをコールして設定します。操作の詳細については,「2.6.7 VariableArray型プロパティの操作」を参照してください。
ただし,ACLをオブジェクトに設定できるのは,ローカルACLを設定しようとしている文書やコンテナの所有者,セキュリティACLに登録されているユーザまたはセキュリティ管理者だけです。
パブリックACLは,文書やコンテナなどのオブジェクトと同じように,CreateObjectメソッドをコールして作成します。メソッドの発行順序については,「3.2.3(1) 文書の作成」を参照してください。ここでは,パブリックACLを作成する場合の準備について示します。
作成したパブリックACLを文書やコンテナからバインドする場合の操作について説明します。
ここでは,CdbrDocumentオブジェクトからパブリックACLをバインドする場合について説明します。
なお,パブリックACLをオブジェクトにバインドできるのは,バインドしようとしているオブジェクトの所有者,セキュリティACLに登録されているユーザまたはセキュリティ管理者だけです。
パブリックACLをCdbrDocumentオブジェクトからバインドするコールシーケンスの例を次に示します。
SDBR_PROP Prop;
SDBR_PROPLIST PropList;
Dmapv pObj;
CdbrDocument Document;
CdbrCompound PublicACLOIID1,PublicACLOIID2;
CdbrVariableArray Varray(DBR_DATATYPE_COMPOUND);
pSession->Begin();
Document.SetOIID(pSession, pOIID);
//パブリックACLのOIIDを可変長配列の要素として指定する
PublicACLOIID1.SetValue(&dbrProp_ACLIdElem,pPubOIID1);
PublicACLOIID2.SetValue(&dbrProp_ACLIdElem,pPubOIID2);
//VariableArrayプロパティの要素数を設定する
Varray.Resize(2):
//要素を設定する
Varray.SetValue(0,PublicACLOIID1);
Varray.SetValue(1,PublicACLOIID2);
//OIIDリスト(VariableArray型プロパティ)を
//プロパティ構造体に設定する
Prop.PropId = dbrProp_PublicACLIds,
Prop.lType = DMA_DATATYPE_OBJECT;
Prop.lCardinality = EDM_DMA_CARDINALITY_VARRAY;
Prop.lCount = 1;
pObj = &Varray;
Prop.uniValue.ppObject = &pObj;
//プロパティ構造体の値をCdbrDocumentオブジェクトに設定する
PropList.pItem = &Prop;
PropList.lCount = 1;
Document.PutPropertyValues(&PropList);
Document.ReleaseObject();
pSession->Commit();
文書やコンテナがすでにパブリックACLをバインドしている場合,PutPropertyValuesメソッドによってパブリックACLを追加すると,それまでバインドしていたパブリックACLはアンバインドされます。
ここでは,文書やコンテナに設定された既存のパブリックACLに,ほかのパブリックACLを追加してバインドする場合の操作について説明します。
ここでは,CdbrDocumentオブジェクトにパブリックACLを追加してバインドする場合について説明します。
なお,パブリックACLをオブジェクトからバインドできるのは,バインドしようとしているオブジェクトの所有者,セキュリティACLに登録されているユーザまたはセキュリティ管理者だけです。
pSession->Begin();
//…
//検索によってバインドするパブリックACLのOIIDを取得する
//…
CdbrDocument Document;
pDmaString_T ppIdList[2];
DmaInteger32 lIdListCount;
//CdbrDocumentオブジェクトに接続する
Document.SetOIID(pSession, pOIID);
//CdbrDocumentオブジェクトとパブリックACLをバインドする
lIdListCount = 2;
ppIdList[0] = pPubOIID1;
ppIdList[1] = pPubOIID2;
Document.BindPublicACL(lIdListCount,ppIdList);
Document.ReleaseObject();
pSession->Commit();