无法添加到其他用户日历

时间:2018-08-02 14:57:16

标签: php microsoft-graph microsoft-graph-sdks

我正在尝试允许用户将项目添加到其他用户的日历中。 用户登录并按以下方式获取令牌

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

已获得管理员身份验证同意,所以一切都很好。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

如果要访问其他用户的数据,则必须使用以下网址:

/users/{id | userPrincipalName}

您的请求格式不正确,您最终向不存在的资源发送了请求,因此Graph不知道该怎么办。
就您而言,您只需要在/users前面添加(有关更多信息,请参见documentation)。

因此您的请求可能如下所示:

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

请记住,如果您以用户(token on behalf of a user)的身份登录,则您尝试访问的日历必须已与登录的用户共享。否则,它将由于缺少特权而失败,因为Graph只允许编辑与用户共享的Calendars。您还需要权限Calendars.Read.Shared和/或Calendars.ReadWrite.Shared(您似乎已经拥有)。
如果您获得访问权限without a user,则日历共享是不必要的,这样您便可以自动拥有对所有用户的完全访问权限。

当前,Graph API仅支持访问共享日历,但不支持编辑/更改共享状态或查看与用户共享哪些日历的操作。但是,您可以在Outlook或Powershell上手动更改共享状态。

答案 1 :(得分:1)

网址应该类似于form { margin: 0; }。由于您是直接说Users('anotheruser')/events。该服务未将其他用户识别为有效段,并抛出错误。