【问题标题】:EWS Folder PermissionEWS 文件夹权限
【发布时间】:2014-01-23 13:43:28
【问题描述】:

我想列出每个 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_

我现在的问题是: - 如何向现有权限集添加权限? - 如何列出这个文件夹的所有权限?

【问题讨论】:

  • 没人知道吗?
  • 获取文件夹权限的方法如下:PropertySet propSet = new PropertySet(BasePropertySet.IdOnly, FolderSchema.DisplayName, FolderSchema.EffectiveRights);Folder calfld = Folder.Bind(service, WellKnownFolderName.Calendar, propSet);Console.WriteLine("The effective rights of the " + calfld.DisplayName + " folder is " + calfld.EffectiveRights);
  • 对不起,我看到你问的是烫发而不是权利。我会看看我能不能解决这个问题。
  • 嗨咪咪,我会帮我很大的忙。谢谢

标签: c# permissions exchangewebservices folder-permissions


【解决方案1】:

图维-

要列出文件夹的权限,请创建一个包含 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(); 

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

【讨论】:

  • 你好咪咪,谢谢你的回答。我用代码解决了我的问题,就像你的一样。在下面观看我的评论。
【解决方案2】:
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());
  }
}

【讨论】:

    猜你喜欢
    • 2015-03-18
    • 1970-01-01
    • 2011-08-12
    • 2018-09-19
    • 2017-02-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多