如何:获取元数据对象的访问控制列表

元数据对象(Application、Entity、Method、MethodInstance、Parameter、TypeDescriptor 等)的业务数据目录层次结构中的每个对象都具有一个访问控制列表 (ACL),该列表指定不同主体对对象拥有的不同权限。在 13 个元数据对象中,只有 LobSystem、Entity、Method 和 MethodInstance 具有可单独控制的 ACL。这些对象称为可单独保护的元数据对象。其他元数据对象从其上一层父级继承 ACL,则称为访问权限受控的元数据对象。

业务数据客户端(如列表中的业务数据和业务数据 Web 部件)由业务数据目录权限驱动。为了使实体在客户端中可用而所需具有的最小权限在客户端权限中是可选的。

备注

由于业务数据目录是在整个网站集中共享的共享服务,所以它不能应用网站集级别安全设置。因此,网站设置与业务数据目录权限几乎无关。

下表显示管理员或具有管理权限的人员可对业务数据目录应用程序设置的权限。

权限

适用于

说明

编辑

访问权限受控的元数据对象

  • 更新

  • 删除

  • 创建子对象

  • 添加属性

  • 移除属性

  • 清除属性

  • 添加本地化显示名称

  • 移除本地化显示名称

  • 清除本地化显示名称

管理权限

可单独保护的元数据对象

  • 设置权限

  • 将权限复制到子级

执行(查看)

MethodInstance

  • 通过各个运行时 API 调用执行 MethodInstance

在客户端中可选

应用程序和实体

  • 在 Web 部件和列表中使用

  • 在选取器中查看

示例

下面的代码示例演示如何检索在业务数据目录中注册的 LobSystem 实例的 ACL。

先决条件

项目引用

运行此示例之前,将下列项目引用添加到控制台应用程序的代码项目中:

  • 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);
            }
        }
    }
}

See Also

概念

业务数据目录:元数据模型