0

我想列出每个 Outlook 文件夹的权限。我可以添加权限,但我的代码会删除所有旧权限并设置新权限。

这是我添加权限的代码:

private void updateFolderPermission(Folder folder, String mail, int per)
{
  UserId delegateUser = new UserId(mail);
  FolderPermission permission = new FolderPermission(delegateUser, FolderPermissionLevel.None);

  switch (per)
  {
    case 0:
      {
        permission = new FolderPermission(delegateUser, FolderPermissionLevel.Owner);
        break;
      }
    case 1:
      {
        permission = new FolderPermission(delegateUser, FolderPermissionLevel.PublishingEditor);
        break;
      }
    case 2:
      {
        permission = new FolderPermission(delegateUser, FolderPermissionLevel.Editor);
        break;
      }
    case 3:
      {
        permission = new FolderPermission(delegateUser, FolderPermissionLevel.PublishingAuthor);
        break;
      }
    case 4:
      {
        permission = new FolderPermission(delegateUser, FolderPermissionLevel.Author);
        break;
      }
    case 5:
      {
        permission = new FolderPermission(delegateUser, FolderPermissionLevel.NoneditingAuthor);
        break;
      }
    case 6:
      {
        permission = new FolderPermission(delegateUser, FolderPermissionLevel.Reviewer);
        break;
      }
    case 7:
      {
        permission = new FolderPermission(delegateUser, FolderPermissionLevel.Contributor);
        break;
      }
    case 8:
      {
        permission = new FolderPermission(delegateUser, FolderPermissionLevel.None);
        break;
      }
  }      
  folder.Permissions.Add(permission);
  folder.Update();
}

我已经调试了代码,但函数_permissions_显示了我_count = 0_

我现在的问题是: - 如何向现有权限集添加权限? - 如何列出此文件夹的所有权限?</p>

4

2 回答 2

0

TuVi-

要列出文件夹的权限,请创建一个包含 FolderSchema.Permissions 的属性集,然后使用该属性集绑定到文件夹:

PropertySet propSet = new PropertySet(BasePropertySet.FirstClassProperties, FolderSchema.Permissions);
Folder folder = Folder.Bind(service, folderid, propSet);

要将权限添加到现有权限集,我让它工作的方式(以及这里推荐的内容:这里:http ://social.msdn.microsoft.com/Forums/exchange/en-US/96da6ca5-9756-4f15 -a57c-6a2962820727/ews-get-read-folder-permissions?forum=exchangesvrdevelopment)是删除当前与用户关联的权限,然后重新添加新权限。如果您不这样做,您只需尝试要添加新的权限,您将收到有关在 DACL 中复制用户 ID 的错误。所以下面的代码删除了旧的权限并添加了新的权限(PublishingAuthor)。

       PropertySet propSet = new PropertySet(BasePropertySet.FirstClassProperties, FolderSchema.Permissions);
       Folder folder = Folder.Bind(service, folderid, propSet);

       if (folder.Permissions.Count != 0)
        {
            for (int t = 0; t < folder.Permissions.Count; t++)
            {
                // Find any permissions associated with the specified user and remove them from the DACL
                if (folder.Permissions[t].UserId.DisplayName != null || folder.Permissions[t].UserId.PrimarySmtpAddress != null)
                {
                    folder.Permissions.Remove(folder.Permissions[t]);
                }
            }
        }

        //Now add the new permissions to the DACL 
        FolderPermission fldperm = new FolderPermission("sadied@contoso.onmicrosoft.com", FolderPermissionLevel.PublishingAuthor);
        folder.Permissions.Add(fldperm);
        folder.Update(); 

希望有帮助!如果是这样,请不要忘记将此答案标记为已接受。

于 2014-02-04T05:44:50.703 回答
0
private void updateFolderPermission(Folder folder, String mail, int per)
{
  UserId delegateUser = new UserId(mail);
  FolderPermission permission = new FolderPermission(delegateUser, FolderPermissionLevel.None);

  switch (per)
  {
    case 0:
      {
        permission = new FolderPermission(delegateUser, FolderPermissionLevel.Owner);
        break;
      }
    case 1:
      {
        permission = new FolderPermission(delegateUser, FolderPermissionLevel.PublishingEditor);
        break;
      }
    case 2:
      {
        permission = new FolderPermission(delegateUser, FolderPermissionLevel.Editor);
        break;
      }
    case 3:
      {
        permission = new FolderPermission(delegateUser, FolderPermissionLevel.PublishingAuthor);
        break;
      }
    case 4:
      {
        permission = new FolderPermission(delegateUser, FolderPermissionLevel.Author);
        break;
      }
    case 5:
      {
        permission = new FolderPermission(delegateUser, FolderPermissionLevel.NoneditingAuthor);
        break;
      }
    case 6:
      {
        permission = new FolderPermission(delegateUser, FolderPermissionLevel.Reviewer);
        break;
      }
    case 7:
      {
        permission = new FolderPermission(delegateUser, FolderPermissionLevel.Contributor);
        break;
      }
    case 8:
      {
        permission = new FolderPermission(delegateUser, FolderPermissionLevel.None);
        break;
      }
  }

  Folder myFolder = Folder.Bind(this.service, folder.Id);
  FolderPermissionCollection fpc = myFolder.Permissions;

  folder.Permissions.Add(permission);

  foreach (FolderPermission fp in fpc)
  {
    if (fp.UserId.DisplayName != null)
    {
      //folder.Permissions.Add(oldPer);
      if (fp.UserId.PrimarySmtpAddress != mail)
      {
        oldUser = new UserId(fp.UserId.PrimarySmtpAddress);
        oldPer = new FolderPermission(oldUser, fp.PermissionLevel);

        folder.Permissions.Add(oldPer);
      }
    }
  }

  try
  {
    folder.Update();
  }
  catch (Exception ex)
  {
    Console.WriteLine(ex.ToString());
  }
}
于 2014-02-06T12:19:19.157 回答