Я пытаюсь разрешить пользователю добавлять элементы в календари других пользователей.
Пользователь входит в систему и получает токен следующим образом
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
Сделали админское согласие на авторизацию, так что все должно быть в порядке.
Какие-либо предложения?
Если вы хотите получить доступ к данным другого пользователя, вы должны использовать следующий URL:
/users/{id | userPrincipalName}
Ваш запрос был только в неправильной форме, и в итоге вы отправили запрос на несуществующий ресурс, поэтому Graph не знал, что делать.
В вашем случае вам просто нужно подготовить /users
(для получения дополнительной информации см. документация).
Итак, ваш запрос может выглядеть так:
$request = $graph->createRequest("post", '/users/anotheruser/events');
Имейте в виду, что если вы вошли в систему как пользователь (токен от имени пользователя), календарь, к которому вы пытаетесь получить доступ, должен быть передан вошедшему в систему пользователю. В противном случае произойдет сбой из-за отсутствия привилегий, поскольку Graph позволяет редактировать только Календари которые делятся с пользователем. Вам также нужны разрешения Calendars.Read.Shared
и / или Calendars.ReadWrite.Shared
(который вы, кажется, уже приобрели).
Общий доступ к календарю не требуется, если вы получаете доступ без пользователя так как тогда у вас автоматически будет полный доступ ко всем пользователям.
В настоящее время Graph API поддерживает только доступ к общим календарям, но нет операций по редактированию / изменению статуса общего доступа или просмотру, какие календари передаются пользователю. Однако вы можете изменить статус общего доступа вручную через Outlook или PowerShell.
URL должен быть что-то вроде Users('anotheruser')/events
, Поскольку вы прямо говорите anotheruser/events
, Служба не распознает другого пользователя в качестве допустимого сегмента и выдает ошибку.