如何通过Core Service获取并设置文件夹的组和用户权限设置?

时间:2012-10-16 01:09:05

标签: tridion tridion-2011

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

代码

// 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());
  }

输出

  

一些文件夹
  每个人都阅读
  编辑器
  主编有
  出版经理有
  交互管理器具有
  T2011-CB-R2 \ areyes具有全部
  [范围]编辑器020创建有读,写
  T2011-CB-R2 \ local1有读,写,删除
  [rights]作者 - 内容

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

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

这适用于我的用例来创建文件夹权限报告。我可以.Replace()使用熟悉的符号(例如rw--rwdl)。

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

另外我注意到我得到了一些,但所有不适用的组都设置为None。我在这里并不特别需要它们,但我很好奇是什么决定了它们是否会被返回 - 我的代码中是否遗漏了什么?

1 个答案:

答案 0 :(得分:4)

确实,

RightsPermissions是枚举。您可以使用以下方法进行设置。如果要设置多个权限,则应执行“Rights.Read | Rights.Write

之类的操作

请记住,此方法将返回您必须在

之后保存\ update \ create的对象
    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;
    }