[方法] メタデータ オブジェクトのアクセス制御リストを取得する
メタデータ オブジェクトのビジネス データ カタログ階層内の各オブジェクト (Application、Entity、Method、MethodInstance、Parameter、TypeDescriptor など) は、各プリンシパルがオブジェクトに対してどの権限を持つかを指定するアクセス制御リスト (ACL) を備えています。13 種類のメタデータ オブジェクトのうち、LobSystem、Entity、Method、および MethodInstance だけが個別に制御できる ACL を備えています。これらのオブジェクトは、個別にセキュリティ保護可能なメタデータ オブジェクトと呼ばれます。その他のメタデータ オブジェクトは、直接上の親から ACL を継承し、アクセス制御されたメタデータ オブジェクトと呼ばれます。
ビジネス データ クライアント (リスト内のビジネス データ、ビジネス データ Web パーツなど) は、ビジネス データ カタログの権限によって実行されます。 クライアントでエンティティを使用可能にするために必要な最低限の権限は "クライアントで選択可能" 権限です。
注意
ビジネス データ カタログはサイト コレクション全体で共有される共有サービスなので、サイト コレクション レベルのセキュリティ設定は適用できません。このため、サイト設定とビジネス データ カタログの権限はあまり関係がありません。
次の表に、管理者または "権限の管理" 権限を持つユーザーがビジネス データ カタログ アプリケーションで設定できる権限を示します。
権限 |
適用先 |
説明 |
---|---|---|
編集 |
アクセス制御されるメタデータ オブジェクト |
|
権限の管理 |
個別にセキュリティ保護可能なメタデータ オブジェクト |
|
実行 (表示) |
MethodInstance |
|
クライアントで選択可能 |
アプリケーションとエンティティ |
|
例
次のコード サンプルは、ビジネス データ カタログに登録された LobSystem インスタンスの ACL を取得する方法を示しています。
前提条件
共有サービス プロバイダが既に作成されていることを確認します。
「[方法] 管理オブジェクト モデルを使用して LobSystem を作成する」に示されている方法で、LobSystem インスタンスを作成し、接続パラメータを設定します。
「[方法] 管理オブジェクト モデルを使用してエンティティを作成する」に示されている方法で ProductModel エンティティを作成します。
「[方法] 管理オブジェクト モデルを使用してメソッドおよびフィルタを作成する」に示されている方法で Finder メソッドを作成します。
コード内の定数値 EnterYourSSPNameHere を共有リソース プロバイダの名前に置き換えます。
プロジェクト参照
このサンプルを実行する前に、コンソール アプリケーション コード プロジェクトに以下のプロジェクト参照を追加します。
Microsoft.SharePoint
Microsoft.SharePoint.Portal
Microsoft.Office.Server
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.Server.ApplicationRegistry.Administration;
using Microsoft.Office.Server.ApplicationRegistry.Infrastructure;
using WSSAdmin = Microsoft.SharePoint.Administration;
using OSSAdmin = Microsoft.Office.Server.Administration;
namespace Microsoft.SDK.SharePointServer.Samples
{
class GetStartedAndCreateSystem
{
const string yourSSPName ="EnterYourSSPNameHere";
static void Main(string[] args)
{
SetupBDC();
GetAccessControlList();
Console.WriteLine("Press any key to exit...");
Console.Read();
}
static void SetupBDC()
{
SqlSessionProvider.Instance().SetSharedResourceProviderToUse(yourSSPName);
}
public static void GetAccessControlList()
{
LobSystemInstance mySysInstance = null;
LobSystemInstanceCollection sysInsCollection = ApplicationRegistry.Instance.GetLobSystemInstancesLikeName("AdventureWorksSampleFromCode");
foreach (LobSystemInstance sysInstance in sysInsCollection)
{
if (sysInstance.Name == "AdventureWorksSampleFromCode")
{
mySysInstance = sysInstance;
break;
}
}
LobSystem ls = mySysInstance.LobSystem;
IAccessControlList acl = ls.GetAccessControlList();
foreach (IAccessControlEntry ace in acl)
{
Console.WriteLine(ace.IdentityName);
Console.WriteLine(ace.Rights);
}
}
}
}