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

出力

一部のフォルダ
全員が読み取りを
持っている 編集者が持っていない 編集長が持っていない パブリケーションマネージャが持っていない インタラクションマネージャが持っていないT2011 -CB-R2\areyesすべて 持っ いる、削除 [権利]作成者-コンテンツになし







`AllowedPermissionsの4つの可能な値は次のようです。

  • 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 に答える