如何从Exchange获取“用户可以编辑的其他用户的日历”

时间:2016-10-26 19:21:03

标签: c# exchange-server exchangewebservices

我正在尝试在服务器端C#应用程序中找到给定用户的其他用户的日历

在我正在编写的Web应用程序中,当用户对另一个用户具有“日历编辑”权限时,我们的客户希望他们能够在我们的应用程序中修改其他用户的配置。因此,当用户登录我们的Web应用程序时,我们需要能够让这些用户将其显示给目标用户。

我查看了EWS和PowerShell cmdlet,这些cmdlet能够获取“具有此邮箱日历的编辑权限的用户列表”,但没有处理“此用户可以编辑的日历列表”。这让我觉得确定文件系统权限会是一个类似的问题(也就是说,这是一个要求“给我那些可以访问这个特定文件系统文件夹的用户”的调用,而是一个枚举/评估的操作所有文件系统中的ACL回答“给我这个用​​户有权访问的所有文件夹”。)

虽然我可以选择“获取每个邮箱的默认日历的权限”并将其映射到我们应用程序中的用户,但这会导致授予权限和应用程序了解这些权限之间的延迟。

我一直在寻找EWS和PowerShell,但我不受这些API的限制。该应用程序在Windows Server 2012+上运行,并且可以分配获取此信息所需的任何权限(它不是以用户的身份运行,而是运行服务帐户)。但我对任何可以获取此信息的 API /方法持开放态度,前提是它比大型邮箱ACL枚举操作更快。

所以我想知道,是否有PowerShell命令或EWS方法将为用户检索用户有权访问的Exchange环境中所有邮箱中的所有文件夹?

编辑:看来答案是我怀疑的:不,没有。唯一的选择是枚举邮箱的权限。

1 个答案:

答案 0 :(得分:1)

  
    

它让我觉得确定文件系统权利会是一个类似的问题(也就是说,它是一个要求的问题"给我那些可以访问这个特定文件系统文件夹的用户&#34 ;,但枚举/评估文件系统中所有ACL的操作,以回答"给我这个用​​户有权访问的所有文件夹")。

  

完全相同的问题是ACL没有反向连接,因此您知道用户是否被授予访问另一个用户邮箱中特定文件夹的唯一方法是枚举所有目标邮箱(如果已通过Outlook代理授予权限,那么这是另一个故事,因为有代理的反向链接)。通常,最简单的方法是在Calendar文件夹中使用Get-MailboxFolderPermission https://technet.microsoft.com/en-us/library/dd335061(v=exchg.160).aspx。该cmdlet将使用Delegated RBAC权限运行(使其更安全地执行此操作),而不是需要任何邮箱API所需的显式权限或EWS模拟。