如何:获取元数据对象的访问控制列表
元数据对象(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);
}
}
}
}