Невозможно добавить в календарь других пользователей

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

const AUTHORIZE_ENDPOINT = '/oauth2/v2.0/authorize';
const TOKEN_ENDPOINT     = '/oauth2/v2.0/token';
const SCOPES             = 'profile openid email User.Read Calendars.ReadWrite Calendars.Read Calendars.Read.Shared Calendars.ReadWrite Calendars.ReadWrite.Shared';


$graph = new Graph();
$graph->setAccessToken($token);
$response = $graph->createRequest("GET", "/me")->setReturnType(Model\User::class)->execute();

Зарегистрированный пользователь может добавить в свой календарь, используя

$request = $graph->createRequest("post", '/me/events');
$request->attachBody($data);
$response = $request->execute();

Но, когда я пытаюсь добавить к другому пользователю с

$request = $graph->createRequest("post", '/anotheruser/events');
$request->attachBody($data);
$response = $request->execute();

Я получаю сообщение

Resource not found for the segment

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

Какие-либо предложения?

1

Решение

Если вы хотите получить доступ к данным другого пользователя, вы должны использовать следующий URL:

/users/{id | userPrincipalName}

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

Итак, ваш запрос может выглядеть так:

$request = $graph->createRequest("post", '/users/anotheruser/events');

Имейте в виду, что если вы вошли в систему как пользователь (токен от имени пользователя), календарь, к которому вы пытаетесь получить доступ, должен быть передан вошедшему в систему пользователю. В противном случае произойдет сбой из-за отсутствия привилегий, поскольку Graph позволяет редактировать только Календари которые делятся с пользователем. Вам также нужны разрешения Calendars.Read.Shared и / или Calendars.ReadWrite.Shared (который вы, кажется, уже приобрели).
Общий доступ к календарю не требуется, если вы получаете доступ без пользователя так как тогда у вас автоматически будет полный доступ ко всем пользователям.

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

2

Другие решения

URL должен быть что-то вроде Users('anotheruser')/events, Поскольку вы прямо говорите anotheruser/events, Служба не распознает другого пользователя в качестве допустимого сегмента и выдает ошибку.

1

По вопросам рекламы [email protected]