You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过API获取SharePoint 2010指定文件的ACL权限?

在SharePoint 2010中获取特定文件ACL的可行API及参数说明

当然可以!在SharePoint 2010中,你可以通过几种不同的API来获取特定文件的ACL(访问控制列表),下面我会针对常用的几种方式详细说明:

1. Server Object Model(服务器端代码适用)

这是SharePoint服务器端开发最直接的选择,适合编写WebPart、控制台应用等运行在服务器上的代码。

可用方法&参数:

  • 通过FileId获取:用SPWeb.GetFileById(fileId)拿到目标文件对象,再通过SPFile.Item.RoleAssignments获取完整ACL信息。
    • 必填参数:fileId(文件对应的唯一整数ID)
  • 通过列表名+文件名获取:先通过列表名称定位文档库,再找到对应文件的列表项,最后提取权限数据。
    • 必填参数:listName(文档库/列表的名称)、fileName(目标文件的名称,建议忽略大小写匹配)

示例代码(C#):

using (SPSite site = new SPSite("http://你的SharePoint站点URL"))
{
    using (SPWeb web = site.OpenWeb())
    {
        // 方式1:通过FileId获取文件ACL
        int targetFileId = 123;
        SPFile targetFile = web.GetFileById(targetFileId);
        SPRoleAssignmentCollection fileAcl = targetFile.Item.RoleAssignments;
        
        // 方式2:通过列表名+文件名获取
        string targetListName = "公司文档库";
        string targetFileName = "项目计划书.docx";
        SPList targetList = web.Lists[targetListName];
        // 查找对应文件的列表项
        SPListItem fileItem = targetList.Items.Cast<SPListItem>()
            .FirstOrDefault(i => i.File.Name.Equals(targetFileName, StringComparison.OrdinalIgnoreCase));
        
        if (fileItem != null)
        {
            SPRoleAssignmentCollection itemAcl = fileItem.RoleAssignments;
            // 遍历权限信息,查看用户/组对应的权限
            foreach (SPRoleAssignment assignment in itemAcl)
            {
                string principalName = assignment.Member.Name;
                foreach (SPRoleDefinition role in assignment.RoleDefinitionBindings)
                {
                    Console.WriteLine($"{principalName} 拥有权限:{role.Name}");
                }
            }
        }
    }
}

2. Client Object Model(CSOM,客户端代码适用)

如果你需要在SharePoint服务器外部编写代码(比如桌面应用、PowerShell脚本),CSOM是更合适的选择,它支持远程调用SharePoint对象。

可用方法&参数:

  • 通过FileId获取:用ClientContext.Web.GetFileById(fileId)获取文件,再通过File.ListItemAllFields.RoleAssignments获取ACL。
    • 必填参数:fileId(文件唯一整数ID)
  • 通过列表名+文件名获取:先获取目标列表,再通过CAML查询定位到对应文件的列表项,最后提取权限。
    • 必填参数:listName(列表名称)、fileName(文件名)

示例代码(C# CSOM):

using Microsoft.SharePoint.Client;

// 初始化客户端上下文
ClientContext ctx = new ClientContext("http://你的SharePoint站点URL");
// 若需要身份验证,添加凭据(比如域账号)
// ctx.Credentials = new NetworkCredential("用户名", "密码", "域名");

// 方式1:通过FileId获取
int targetFileId = 123;
File targetFile = ctx.Web.GetFileById(targetFileId);
ListItem fileItem = targetFile.ListItemAllFields;
// 加载权限集合
ctx.Load(fileItem, i => i.RoleAssignments);
ctx.ExecuteQuery();

// 遍历权限
foreach (RoleAssignment assignment in fileItem.RoleAssignments)
{
    ctx.Load(assignment.Member);
    ctx.Load(assignment.RoleDefinitionBindings);
    ctx.ExecuteQuery();
    Console.WriteLine($"主体:{assignment.Member.Title}");
    foreach (RoleDefinition role in assignment.RoleDefinitionBindings)
    {
        Console.WriteLine($"权限:{role.Name}");
    }
}

// 方式2:通过列表名+文件名获取
string targetListName = "公司文档库";
string targetFileName = "项目计划书.docx";
List targetList = ctx.Web.Lists.GetByTitle(targetListName);
// 构建CAML查询查找文件
CamlQuery query = new CamlQuery();
query.ViewXml = $@"<View><Query><Where><Eq><FieldRef Name='FileLeafRef'/><Value Type='Text'>{targetFileName}</Value></Eq></Where></Query></View>";
ListItemCollection items = targetList.GetItems(query);
ctx.Load(items);
ctx.ExecuteQuery();

if (items.Count > 0)
{
    ListItem targetItem = items[0];
    ctx.Load(targetItem.RoleAssignments);
    ctx.ExecuteQuery();
    // 处理权限逻辑...
}

3. SharePoint Lists Web Service(跨语言/平台适用)

如果你的场景无法使用.NET相关的对象模型,也可以通过SharePoint的SOAP Web服务来获取权限,核心是调用Lists.asmx中的GetPermissionCollection方法。

可用方法&参数:

  • 步骤:先通过GetListItems方法根据列表名+文件名获取文件对应的列表项ID,再调用GetPermissionCollection获取ACL。
    • GetPermissionCollection必填参数:objectName(列表名称)、objectType(固定为ListItem)、objectId(文件对应的列表项ID)

简化的SOAP请求示例:

<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <GetPermissionCollection xmlns="http://schemas.microsoft.com/sharepoint/soap/">
      <objectName>公司文档库</objectName>
      <objectType>ListItem</objectType>
      <objectId>456</objectId> <!-- 文件对应的列表项ID -->
    </GetPermissionCollection>
  </soap:Body>
</soap:Envelope>

内容的提问来源于stack exchange,提问作者vkc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:52:10