2

我可以使用以下内容获取表示给定文件夹的组和用户权限的字符串。

代码

// assumes Core Service client "client"

var folderData = client.Read("tcm:5-26-2", new ReadOptions()) as FolderData;   
var accessControlEntryDataArray =
  folderData.AccessControlList.AccessControlEntries;

Console.WriteLine(folderData.Title);

foreach (var accessControlEntryData in accessControlEntryDataArray)
  {
  Console.WriteLine("{0} has {1}",
                    accessControlEntryData.Trustee.Title,
                    accessControlEntryData.AllowedPermissions.ToString());
  }

输出

某些文件
每个读过
编辑没有
主 编辑没有
_ _
_ _
_ , 删除 [权利] 作者 - 内容



似乎 `AllowedPermissions 的四个可能值是:

  • None
  • Read
  • Read, Write
  • Read, Write, Delete
  • All

这非常适合我创建文件夹权限报告的用例。我可以.Replace()用熟悉的符号表示(例如rw--rwdl)。

但是,操纵这些值是否也是设置string权限的正确方法?我想我会想要对象或枚举。有人能指出我正确的方向吗?

我还注意到我得到了一些,但不是所有不适用的组都设置为None. 我在这里并不特别需要它们,但我很好奇是什么决定了它们是否会被返回——我是否错过了代码中的某些内容?

4

1 回答 1

4

Rights确实Permissions是枚举。您可以使用以下方法进行设置。如果你想设置多个权限,你应该做类似“ Rights.Read | Rights.Write

请记住,此方法将返回您必须保存\更新\创建的对象

    public static OrganizationalItemData SetPermissionsOnOrganizationalItem(
               OrganizationalItemData organizationalItem, 
               TrusteeData trustee, 
               Permissions allowedPermissions, 
               Permissions deniedPermissions = Permissions.None)
    {
        if (organizationalItem.AccessControlList == null)
        {
            organizationalItem.AccessControlList 
                    = new AccessControlListData
                    {AccessControlEntries = new AccessControlEntryData[0]};
        }
        var entries = organizationalItem.AccessControlList
                                        .AccessControlEntries.ToList();

        // First check if this trustee already has some permissions
        var entry = entries.SingleOrDefault(
                               ace => ace.Trustee.IdRef == trustee.Id);
        if (entry != null)
        {
            // Remove this entry
            entries.Remove(entry);
        }

        entries.Add(new AccessControlEntryData
        {
            AllowedPermissions = allowedPermissions,
            DeniedPermissions = deniedPermissions,
            Trustee = new LinkToTrusteeData { IdRef = trustee.Id }
        });
        organizationalItem.AccessControlList.AccessControlEntries 
                                                      = entries.ToArray();

        return organizationalItem;
    }
于 2012-10-16T08:59:46.680 回答