Передача прав доступа и EWS в Exchange
Узнайте, как использовать управляемый интерфейс API EWS и EWS в Exchange для предоставления делегированного доступа к почтовым ящикам пользователей.
Вы можете предоставить пользователям доступ к почтовым ящикам других пользователей одним из трех способов:
добавив представителей и указав разрешения для каждого из них;
вручную изменив разрешения для папки;
с помощью олицетворения.
Варианты делегирования и изменения разрешений для папки лучше всего использовать для предоставления доступа только нескольким пользователям, поскольку вам придется добавлять разрешения для каждого почтового ящика отдельно. Олицетворение — лучший вариант при работе с несколькими почтовыми ящиками, так как оно позволяет предоставить одной служебной учетной записи доступ к каждому почтовому ящику в базе данных. На рис. 1 показаны некоторые различия между этими типами доступа.
Рис. 1. Способы доступа к почтовым ящикам других пользователей
Когда дело доходит до отправки почты или планирования собраний, делегатам могут быть предоставлены разрешения "отправить от имени", поэтому получатель сообщения электронной почты или приглашения на собрание, отправленный делегатом, будет видеть " делегат от имени владельца почтового ящика " при получении сообщения электронной почты или приглашения на собрание в Outlook. Добавление текста "отправка от имени" является реализацией на стороне клиента, его можно создать с помощью значений "от" и "отправитель". В поле "От" указывается владелец почтового ящика, а в поле "Отправитель" — представитель, отправивший сообщение. Если учетная запись службы, олицетворяющая пользователя, отправляет сообщение электронной почты или планирует собрание для владельца почтового ящика, сообщение отправляется как будто бы самим владельцем почтового ящика. Получатель не сможет установить, что оно было отправлено с помощью учетной записи службы. Пользователи, которым предоставлены разрешения на доступ к папке, но не имеющие делегированного доступа, не смогут использовать функции "Отправить как" или "Отправить от имени" владельца почтового ящика. Они имеют доступ к папкам почтовых ящиков и могут создавать элементы этих в папках, но не могут отправлять их.
Когда можно изменять разрешения для папок напрямую? Как правило, если вы хотите предоставить пользователю доступ к папке, но не хотите предоставлять пользователю разрешения на "отправку от имени", если ваши требования к разрешениям не сопоставлены со значениями перечисления DelegateFolderPermissionLevel управляемого API EWS или значениями элементов EWS PermissionLevel, или если вы хотите предоставить пользователю доступ к одной пользовательской папке.
Если для достижения цели вам нужно только изменить разрешения для папок и не нужно добавлять делегата (т. е. разрешения на "отправку от имени" не требуются), см. раздел Настройка разрешений доступа к папкам для других пользователей с помощью EWS в Exchange.
Обратите внимание, что для настройки делегированного доступа можно также использовать Outlook или командную консоль Exchange Server (командная консоль Exchange).
Как работает делегированный доступ?
Делегированный доступ позволяет пользователям получать доступ к некоторым или всем папкам владельца почтового ящика и действовать от имени владельца почтового ящика. Владелец почтового ящика может быть пользователем или ресурсом, например конференц-залом. Например, администратору могут быть предоставлены разрешения делегата для доступа к папке календаря конференц-зала для обработки запросов на бронирование. С помощью Управляемого API EWS или EWS можно разрешить владельцу почтового ящика или администратору добавлять делегата, указывать папки, к которым делегат может получить доступ, а затем указывать разрешения для этой папки. Делегатам можно предоставить доступ к следующим папкам:
Календарь
Задачи
Inbox;
Контакты
Примечания
Журнал
Когда пользователь имеет делегированный доступ к одной или нескольким из этих папок, он может создавать, получать, обновлять, удалять, копировать и искать элементы в этой папке и любых дочерних папках, в зависимости от разрешений, заданных для этой папки. Способ выполнения этих действий приложением зависит от того, требуется ли явный или неявный доступ.
Права делегата
Когда администратор или владелец почтового ящика добавляет делегата в почтовый ящик, он также может задать уровень разрешений для одной или нескольких папок. Если для папки не задан уровень разрешений, значение разрешения по умолчанию равно "Нет". Можно указать одинаковый уровень разрешений для папки для нескольких пользователей, а также пользователи могут иметь разные уровни разрешений для разных папок. Если вы используете Управляемый API EWS, чтобы задать разрешения делегата для папок, используйте свойство DelegateUser.Permissions, содержащее одно из значений перечисления DelegateFolderPermissionLevel для каждой папки. Если вы используете EWS, для задания разрешений делегата используется элемент DelegatePermissions, а для определения уровня разрешений — элемент PermissionLevel.
Табл. 2. Делегирование уровней разрешений
Уровень разрешений | Описание |
---|---|
Нет |
Это значение по умолчанию для всех папок. |
Автор |
Делегат может читать и создавать элементы, а также изменять и удалять элементы, которые он создает. Например, делегат может создавать запросы на задачи и приглашения на собрания непосредственно в папке "Задача" или "Календарь" владельца почтового ящика, а затем отправлять любой элемент от имени владельца почтового ящика. |
Редактор |
Делегат может делать все, что может сделать автор, а также изменять и удалять элементы, созданные владельцем почтового ящика. |
Reviewer |
Делегат может читать элементы; например, делегат с разрешением рецензента может читать сообщения в папке "Входящие" другого пользователя. |
Пользовательские |
Владелец почтового ящика предоставил делегату настраиваемый набор разрешений. |
Свойство Управляемого API EWS DelgateUser.ViewPrivateItems и элемент EWS ViewPrivateItems — это глобальный параметр, который влияет на все папки владельца почтового ящика, включая все папки "Почта", "Контакты", "Календарь", "Задачи", "Заметки" и "Журнал". Невозможно разрешить доступ к личным элементам только в одной папке.
Явный доступ
Проще говоря, явный доступ — это самый простой способ разрешить делегатам выполнять действия с папками или элементами владельца почтового ящика. Явный доступ предоставляется делегату, если в запросе к серверу включены имя известной папки для папки владельца почтового ящика, а также SMTP-адрес владельца почтового ящика. Доступ является явным, так как в запросе делегата явным образом указывается, что контекстом для метода или операции является почтовый ящик владельца почтового ящика, а не почтовый ящик делегата.
Явный доступ определяет контекст для всех методов или операций, которые затем выполняются с папками или элементами. В идентификаторах всех элементов и папок, возвращаемых при настроенном явном доступе, однозначно указано, что они принадлежат владельцу почтового ящика (хотя и не в понятном для человека формате). Таким образом, приложению не нужно постоянно указывать SMTP-адрес владельца почтового ящика. Контекст скрыт в идентификаторах. После идентификации элемента или папки делегат фактически использует неявный доступ для изменения элемента. На следующем рисунке показан процесс получения явного и неявного доступа.
Рис. 2. Запрос явного и неявного доступа к элементу или папке
Явный доступ можно задать во многих различных сценариях. По сути, при отправке идентификатора папки в методе или операции можно задать явный доступ. Это может быть поиск папок, поиск встреч, получение элементов, поиск бесед и т. д.
Явный доступ и управляемый API EWS
Вы можете инициировать явный доступ делегата с помощью любого из следующих перегруженных методов, которые принимают входной параметр FolderId для идентификации целевой папки:
И не только!
Параметр FolderId можно использовать в каждом из этих методов для определения целевой папки владельца почтового ящика следующим образом.
new FolderId(WellKnownFolderName.Calendar, "primary@contoso.com");
Например, для привязки к папке "Календарь" идентификатор FolderId в этом методе Bind указывает известное имя папки и SMTP-адрес владельца почтового ящика.
CalendarFolder calendar = CalendarFolder.Bind(service, new FolderId(WellKnownFolderName.Calendar, "primary@contoso.com"), new PropertySet());
Указав имя известной папки и SMTP-адрес, делегат может выполнить привязку к папке календаря владельца почтового ящика и тем самым получить явный доступ к данной папке. Все последующие запросы на неявный доступ к элементам в папке зависят от контекста, возвращенного в идентификаторах элементов и идентификаторах папок. По сути, идентификаторы содержат контекст для неявных вызовов доступа делегата. Кроме того, чтобы получить идентификатор элемента, удовлетворяющего определенным критериям, можно использовать следующую команду.
FindItemsResults<Item> results = service.FindItems(new FolderId(WellKnownFolderName.Calendar, "primary@contoso.com"), filter, view);
В этом случае возвращается идентификатор элемента, а затем делегат может использовать неявный доступ для внесения изменений в элемент с помощью идентификатора элемента.
Вам не нужно повторно инициировать явный доступ, пока не потребуется идентификатор элемента или идентификатор папки, к которым не был получен доступ посредством существующего явного доступа.
Явный доступ и EWS
Вы можете инициировать явный доступ с помощью операций GetFolder, FindItem или FindFolder. В этих операциях для идентификации целевой папки можно использовать элемент DistinguishedFolderId. Элемент DistinguishedFolderId имеет один дополнительный дочерний элемент Mailbox. Элемент Mailbox, используемый в качестве дочернего для элемента DistinguishedFolderId, указывает почтовый ящик, в которому обращается делегат. Если вызывающий пользователь имеет разрешение на доступ к папке владельца почтового ящика, ответ будет содержать коллекцию идентификаторов элементов или папок в этом почтовом ящике. Идентификаторы элементов и папок, возвращаемые в ответе, можно использовать для предоставления неявного доступа для делегата.
Неявный доступ
Неявный доступ используется, когда делегат получил идентификатор элемента или папки в почтовом ящике владельца почтового ящика и хочет обновить, удалить или скопировать элемент. Когда делегат использует этот идентификатор элемента или папки в запросе, изменения вносятся в элемент в почтовом ящике владельца почтового ящика. Делегату не нужно указывать SMTP-адрес владельца почтового ящика.
Например, если у делегата есть идентификатор одной из папок владельца почтового ящика, то он может выполнить операцию FindItem в этой папке, используя идентификатор папки без явного определения почтового ящика владельца почтового ящика. На этом этапе делегат может выполнять действия с папкой владельца почтового ящика, используя идентификаторы, возвращаемые в ответах.
Неявный доступ и управляемый API EWS
Если идентификатор элемента был получен методом FindItems, то этот идентификатор элемента можно использовать в последующем вызове метода Item.Bind для привязки к элементу. Затем можно вызвать метод Item.Update, Item.Delete или Item.Copy, а также вызвать любой необходимый для выполнения задачи метод, для которого требуется идентификатор элемента. Если у делегата есть соответствующие разрешения на папку, содержащую элемент (и, если применимо, папку, в которую перемещается элемент), то делегат может вносить изменения в соответствии с уровнем своих разрешений.
Неявный доступ и EWS
Если идентификатор элемента был получен в ходе операции FindItem, то этот идентификатор можно использовать в последующих операциях GetItem для привязки к элементу. Затем можно вызвать операцию UpdateItem, DeleteItem или CopyItem (или любую операцию, для которой требуется идентификатор элемента), которая необходима для выполнения задачи. Если у делегата есть соответствующие разрешения на папку, содержащую элемент (и, если применимо, папку, в которую перемещается элемент), то делегат может вносить изменения в соответствии с уровнем своих разрешений.
В этом разделе:
Доступ к календарю в качестве делегата с помощью EWS в Exchange
Доступ к контактам в качестве делегата с помощью EWS в Exchange
Доступ к электронной почте в качестве делегата с помощью EWS в Exchange
Настройка разрешений доступа к папкам для других пользователей с помощью EWS в Exchange
Обработка ошибок, связанных с делегированием, в EWS в Exchange