Предоставление общего доступа к календарю или его делегирование в Outlook

В Outlook владелец календаря может поделиться им с другим пользователем. Владелец может указать, какие сведения об общедоступных событиях можно просматривать, а также может предоставить пользователям из той же организации доступ для записи к календарю.

Владелец также может делегировать другому пользователю управление собраниями в основном календаре владельца. Делегаты — это получатели общего доступа, которые могут просматривать всю информацию в и иметь доступ на запись к не частным событиям. Кроме того, они получают приглашения на собрания и ответы на них, а также отвечают на приглашения на собрания от имени владельца. Владелец также может предоставлять делегатам явные разрешения на просмотр частных событий владельца в календаре.

Прежде чем общий доступ к календарю или делегирование вступают в силу, владелец отправляет получателя общего доступа или делегирует приглашение, а получатель или делегат общего доступа принимает приглашение или явно добавляет общий или делегированный календарь для доступа. Приглашение и добавление общего или делегированного календаря происходит в клиенте Outlook.

После настройки общего доступа или делегирования в Outlook приложения смогут использовать API Microsoft Graph, чтобы управлять общим доступом и делегированием.

Оставшаяся часть этой статьи основана на следующем примере сценария:

  • Алекс Уилбер (Alex Wilber) делегирует Меган Боуен (Megan Bowen) в свой основной календарь и разрешает ей просматривать частные события в этом календаре.
  • Алекс делится календарем "Детские праздники" с Адель Вэнс (Adele Vance) и Меган Боуен и предоставляет им обеим разрешения read для доступа ко всем сведениям об общедоступных событиях в календаре "Детские праздники", а также сведениям о доступности для частных событий.

В этой статье описано, как программным способом выполнить следующие задачи в общем или делегированном календаре:

Приложения также могут выполнять следующие задачи с помощью общедоступного API:

Примечание.

Свойства и API для общего доступа к календарям и их делегирования, как описано в этой статье, сейчас доступны в конечной точке версии 1.0, за исключением свойств календаря isShared и isSharedWithMe. Эти два свойства доступны только в конечной точке бета-версии.

Получение сведений календаря о получателях общих данных и делегатах, а также обновление отдельных разрешений

Содержание:

Каждый календарь связан с коллекцией объектов calendarPermission , каждый из которых описывает получателя общего ресурса или делегата и соответствующее разрешение, настроенное владельцем календаря. Перечисление calendarRoleType определяет диапазон разрешений, поддерживаемых Microsoft Graph:

  • none Это значение применяется только My Organization к тем, у которых нет разрешений на календарь. Оно не применяется к отдельным пользователям, так как только пользователи с разрешениями связаны с объектом calendarPermission календаря.
  • freeBusyRead Получатель общего ресурса может просматривать состояние доступности владельца, но не просматривать другие сведения в календаре.
  • limitedRead Получатель общего ресурса может просматривать состояние доступности владельца, а также названия и расположения неличных событий в календаре.
  • read Получатель общего ресурса может просматривать состояние доступности владельца в частных событиях и все сведения о событиях, не являющихся частными, в календаре.
  • write Получатель общего ресурса может просматривать состояние доступности владельца в частных событиях, а также просматривать все сведения и изменять (создавать, обновлять или удалять) события, не являющиеся частными, в календаре.
  • delegateWithoutPrivateEventAccess. Делегат может просматривать сведения о доступности владельца в частных событиях и обладает доступом с разрешением write к общедоступным событиям календаря.
  • delegateWithPrivateEventAccess. Делегат может просматривать сведения о частных и общедоступных событиях владельца и обладает доступом с разрешением write ко всем событиям календаря.

Основной календарь пользователя всегда предоставляется объекту My Organization (Моя организация), представляющему пользователей в организации владельца. По умолчанию они могут читать сведения о доступности владельца в этом календаре и обладают разрешением freeBusyRead.

Владелец календаря. Получение разрешений и сведений об общем доступе или делегировании

В этом примере показано, как с согласия Алекса или администратора получать объекты calendarPermission, связанные с основным календарем Алекса. Запрос возвращает два таких объекта разрешений:

  • Первый объект calendarPermission присвоен делегату Меган со следующими значениями свойств:

    • Свойству isRemovable присвоено значение true, предоставляя Алексу возможность отменить делегирование.
    • Свойство isInsideOrganization имеет значение true, так как только пользователи из той же организации могут быть делегатами.
    • Свойству role для Меган соответствует значение delegateWithPrivateEventAccess, настроенное Алексом.
    • Свойство allowedRoles включает типы ролей delegateWithoutPrivateEventAccess и delegateWithPrivateEventAccess, поддерживающие делегирование.
    • emailAddress определяет Меган.
  • Второй объект calendarPermission — это объект по умолчанию, назначаемый объекту My Organization со следующими значениями свойств:

    • Свойству isRemovable присвоено значение false, так как основной календарь всегда является общим для организации владельца.
    • Свойство isInsideOrganization имеет значение true.
    • Свойству role присвоено значение freeBusyRead, являющееся стандартным для объекта My Organization.
    • emailAddress определяет для дочернего свойства name значение My Organization; свойство address для My Organization по умолчанию имеет значение null.

Разрешения Microsoft Graph

Для выполнения этой операции воспользуйтесь делегированным разрешением с минимальными правами или разрешением для приложений Calendars.Read соответственно. Дополнительные сведения см. в разделе Разрешения календаря.

GET https://graph.microsoft.com/beta/users/AlexW@contoso.com/calendar/calendarPermissions
HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#users('64339082-ed84-4b0b-b4ab-004ae54f3747')/calendar/calendarPermissions",
    "value": [
        {
            "id": "L289RXhjaGFuZ2VMYWJTWVnYW5C",
            "isRemovable": true,
            "isInsideOrganization": true,
            "role": "delegateWithPrivateEventAccess",
            "allowedRoles": [
                "freeBusyRead",
                "limitedRead",
                "read",
                "write",
                "delegateWithoutPrivateEventAccess",
                "delegateWithPrivateEventAccess"
            ],
            "emailAddress": {
                "name": "Megan Bowen",
                "address": "MeganB@contoso.com"
            }
        },
        {
            "id": "RGVmYXVsdA==",
            "isRemovable": false,
            "isInsideOrganization": true,
            "role": "freeBusyRead",
            "allowedRoles": [
                "none",
                "freeBusyRead",
                "limitedRead",
                "read",
                "write"
            ],
            "emailAddress": {
                "name": "My Organization"
            }
        }
    ]
}

Владелец календаря: обновление разрешений для существующего получателя общего ресурса или делегата в календаре

С согласия Алекса или администратора можно обновить разрешения, назначенные существующему получателю или делегату общей папки (указанные свойством роли ), при условии, что новые разрешения поддерживаются этими разрешенными списками, изначально настроенными для получателя общего ресурса или делегата для этого календаря.

Помимо свойства role , вы не можете обновить другие свойства существующего получателя общего ресурса или делегата. Изменение значения свойства emailAddress требует удаления получателя или делегата общего ресурса и повторной настройки нового экземпляра calendarPermission .

В примере в этом разделе обновляется свойство роли , изменяя разрешение существующего получателя общего ресурса, Адель, с read на write для настраиваемого календаря "Детские вечеринки".

Разрешения Microsoft Graph

Для выполнения этой операции воспользуйтесь делегированным разрешением с минимальными правами или разрешением для приложений Calendars.ReadWrite соответственно. Дополнительные сведения см. в разделе Разрешения календаря.

PATCH https://graph.microsoft.com/beta/users/AlexW@contoso.com/calendars/AAMkADAwAABf02bAAAA=/calendarPermissions/L289RXhjaGFuZ2VMYWJQWRlbGVW
Content-type: application/json

{
  "role": "write"
}
HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#users('64339082-ed84-4b0b-b4ab-004ae54f3747')/calendars('AAMkADAwAABf02bAAAA%3D')/calendarPermissions/$entity",
    "id": "L289RXhjaGFuZ2VMYWJQWRlbGVW",
    "isRemovable": true,
    "isInsideOrganization": true,
    "role": "write",
    "allowedRoles": [
        "freeBusyRead",
        "limitedRead",
        "read",
        "write"
    ],
    "emailAddress": {
        "name": "Adele Vance",
        "address": "AdeleV@contoso.com"
    }
}

Получение свойств общего или делегированного календаря

Содержание:

В этом примере Алекс делегировал свой основной календарь и предоставил делегату Меган Боуен разрешение на просмотр элементов календаря, помеченных как частные. В этом разделе показаны свойства делегированного календаря, сначала с точки зрения и с согласия владельца (Алекс), а затем с точки зрения и с согласия делегата (Меган). Согласие администратора также поддерживается для каждого случая.

Владелец календаря. Получение свойств общего или делегированного календаря

В примере из этого раздела выполняется получение свойств основного календаря с точки зрения владельца (Алекс).

Обратите внимание на следующие свойства от имени Алекса:

  • Свойство canShare имеет значение true, так как Алекс является владельцем.
  • Свойство canViewPrivateItems имеет значение true, так как Алекс является владельцем.
  • Свойству isShared присвоено значение true, так как Алекс настроил делегата для этого календаря.
  • Свойство isSharedWithMe всегда имеет значение false для владельца календаря.
  • Свойство owner отображает Алекса в качестве владельца.

Разрешения Microsoft Graph

Для выполнения этой операции воспользуйтесь делегированным разрешением с минимальными правами или разрешением для приложений Calendars.Read соответственно. Дополнительные сведения см. в разделе Разрешения календаря.

GET https://graph.microsoft.com/beta/users/AlexW@contoso.com/calendar
HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#users('64339082-ed84-4b0b-b4ab-004ae54f3747')/calendar/$entity",
    "id": "AQMkADAw7QAAAJfygAAAA==",
    "name": "Calendar",
    "color": "auto",
    "hexColor": "",
    "changeKey": "NEXywgsVrkeNsFsyVyRrtAAAAAACOg==",
    "canShare": true,
    "canViewPrivateItems": true,
    "isShared": true,
    "isSharedWithMe": false,
    "canEdit": true,
    "allowedOnlineMeetingProviders": [
        "teamsForBusiness"
    ],
    "defaultOnlineMeetingProvider": "teamsForBusiness",
    "isTallyingResponses": true,
    "isRemovable": false,
    "owner": {
        "name": "Alex Wilber",
        "address": "AlexW@contoso.com"
    }
}

Общий доступ к получателю или делегату: получение свойств общего или делегированного календаря

В примере из этого раздела выполняется получение свойств того же календаря с точки зрения делегата (Меган).

Обратите внимание на следующие свойства:

  • Свойство name календаря по умолчанию соответствует отображаемому имени владельца. В этом случае это Alex Wilber (Алекс Уилбер), так как календарь Алекса делегирован Меган.
  • Свойство canShare имеет значение false, так как Меган не является владельцем этого календаря.
  • Свойство canViewPrivateItems имеет значение true для делегата Меган, настроенное Алексом. Для получателя общего доступа, не являющегося делегатом, это свойство всегда имеет значение false.
  • Свойство isShared имеет значение false. Это свойство указывает только для владельца календаря, был ли к календарю предоставлен общий доступ или он был делегирован.
  • Свойство isSharedWithMe имеет значение true, так как Меган является делегатом.
  • Свойство canEdit имеет значение true, так как делегаты, включая Меган, обладают доступом с разрешением на запись.
  • Свойству owner присвоено значение Alex (Алекс).

Примечание.

Получатель общего доступа или делегат может настраивать только свойство name общего/делегированного календаря. Изменение отображается только для него самого. Владелец календаря не видит таких изменений имени календаря.

Разрешения Microsoft Graph

Для выполнения этой операции воспользуйтесь делегированным разрешением с минимальными правами Calendars.Read.Shared или разрешением для приложений Calendars.Read соответственно. Дополнительные сведения см. в разделе Разрешения календаря.

GET https://graph.microsoft.com/beta/users/meganb@contoso.com/calendars/AAMkADlAABhbftjAAA=
HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#users('meganb%40contoso.com')/calendars/$entity",
    "id": "AAMkADlAABhbftjAAA=",
    "name": "Alex Wilber",
    "color": "auto",
    "hexColor": "",
    "changeKey": "E6LznKWmX0KTsAD9qRJjeAAAYWo3EQ==",
    "canShare": false,
    "canViewPrivateItems": true,
    "isShared": false,
    "isSharedWithMe": true,
    "canEdit": true,
    "allowedOnlineMeetingProviders": [
        "teamsForBusiness"
    ],
    "defaultOnlineMeetingProvider": "teamsForBusiness",
    "isTallyingResponses": true,
    "isRemovable": true,
    "owner": {
        "name": "Alex Wilber",
        "address": "AlexW@contoso.com"
    }
}

Получение или настройка параметров почтового ящика для получения приглашений на собрания и ответов на них

Содержание:

В зависимости от уровня делегирования, предпочитаемого владельцем календаря, владелец может указать, кто должен получать приглашения на собрания и ответы на них, чтобы управлять собраниями в календаре.

Программным способом можно получить или настроить свойство delegateMeetingMessageDeliveryOptions объекта mailboxSettings владельца календаря, чтобы указать, кому Outlook должен направлять экземпляры eventMessageRequest и eventMessageResponse:

  • sendToDelegateOnly

    Outlook должен направлять экземпляры eventMessageRequest и eventMessageResponse только делегатам. Это параметр по умолчанию. Владелец может просматривать ответы на приглашения на собрания или отвечать на приглашения с помощью соответствующего объекта event в делегированном календаре.

  • sendToDelegateAndInformationToPrincipal

    Outlook должен направлять экземпляры eventMessageRequest и eventMessageResponse делегатам и владельцу календаря. Только делегатам доступны параметры для принятия и отклонения приглашения на собрание. Владельцу отправляется уведомление в виде обычного сообщения электронной почты. Владелец может ответить на приглашение, открыв объект event в делегированном календаре.

  • sendToDelegateAndPrincipal

    Outlook должен направлять экземпляры eventMessageRequest и eventMessageResponse делегатам и владельцу календаря, любой из которых может ответить на приглашение на собрание.

Это параметр на уровне почтового ящика, поэтому этот параметр применяется ко всем делегатам владельца почтового ящика.

Получение параметра доставки при делегировании для почтового ящика пользователя

В примере из этого раздела выполняется получение объекта mailboxSettings владельца календаря, который разрешает Outlook направлять приглашения на собрания и ответы на них только делегатам календаря. Таким образом, свойству delegateMeetingMessageDeliveryOptions присвоено значение sendToDelegateOnly.

Разрешения Microsoft Graph

Для выполнения этой операции воспользуйтесь делегированным разрешением с минимальными правами или разрешением для приложений MailboxSettings.Read соответственно. Дополнительные сведения о разрешениях, необходимых для работы с почтовыми ящиками, см. в разделе Разрешения почты.

GET https://graph.microsoft.com/beta/users/AlexW@contoso.com/mailboxsettings
HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#users('64339082-ed84-4b0b-b4ab-004ae54f3747')/mailboxSettings",
    "archiveFolder": "AQMkADAwAGVQAAAKfowAAAA==",
    "timeZone": "Pacific Standard Time",
    "delegateMeetingMessageDeliveryOptions": "sendToDelegateOnly",
    "dateFormat": "M/d/yyyy",
    "timeFormat": "h:mm tt",
    "automaticRepliesSetting": {
        "status": "disabled",
        "externalAudience": "all",
        "internalReplyMessage": "",
        "externalReplyMessage": "",
        "scheduledStartDateTime": {
            "dateTime": "2019-12-24T05:00:00.0000000",
            "timeZone": "UTC"
        },
        "scheduledEndDateTime": {
            "dateTime": "2019-12-25T05:00:00.0000000",
            "timeZone": "UTC"
        }
    },
    "language": {
        "locale": "en-US",
        "displayName": "English (United States)"
    },
    "workingHours": {
        "daysOfWeek": [
            "monday",
            "tuesday",
            "wednesday",
            "thursday",
            "friday"
        ],
        "startTime": "08:00:00.0000000",
        "endTime": "17:00:00.0000000",
        "timeZone": {
            "name": "Pacific Standard Time"
        }
    }
}

Настройка параметра доставки при делегировании для почтового ящика пользователя

В примере из этого раздела выполняется обновление свойства delegateMeetingMessageDeliveryOptions с присвоением ему значения sendToDelegateAndPrincipal, чтобы Outlook направлял приглашения на собрания и ответы на них в делегированном календаре всем делегатам и владельцу.

Разрешения Microsoft Graph

Для выполнения этой операции воспользуйтесь делегированным разрешением с минимальными правами или разрешением для приложений MailboxSettings.ReadWrite соответственно. Дополнительные сведения о разрешениях, необходимых для работы с почтовыми ящиками, см. в разделе Разрешения почты.

PATCH https://graph.microsoft.com/beta/users/AlexW@contoso.com/mailboxsettings
Content-type: application/json

{
  "delegateMeetingMessageDeliveryOptions": "sendToDelegateAndPrincipal"
}
HTTP/1.1 200 OK
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/beta/$metadata#users('64339082-ed84-4b0b-b4ab-004ae54f3747')/mailboxSettings",
    "delegateMeetingMessageDeliveryOptions": "sendToDelegateAndPrincipal"
}

Удаление получателя общего доступа или делегата календаря

В примере ниже Алекс удаляет Меган из роли получателя общего доступа к календарю "Детские праздники".

Разрешения Microsoft Graph

Для выполнения этой операции воспользуйтесь делегированным разрешением с минимальными правами или разрешением для приложений Calendars.ReadWrite соответственно. Дополнительные сведения см. в разделе Разрешения календаря.

DELETE https://graph.microsoft.com/beta/users/AlexW@contoso.com/calendars/AAMkADAwAABf02bAAAA=/calendarPermissions/L289RXhjaGFuZ2VMYWJTWVnYW5C
HTTP/1.1 204 No Content