1

我试图允许用户将项目添加到其他用户的日历中。用户登录并获取令牌如下

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

已完成管理员身份验证同意,所以一切都应该没问题。

有什么建议么?

4

2 回答 2

2

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

/users/{id | userPrincipalName}

您的请求格式错误,您最终向不存在的资源发送了请求,因此 Graph 不知道该怎么做。
在您的情况下,您只需要预先添加/users(有关更多信息,请参阅文档)。

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

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

请记住,如果您以用户身份(代表用户的令牌)登录,则您尝试访问的日历必须已与登录用户共享。否则它将由于缺少权限而失败,因为 Graph 仅允许编辑与用户共享的日历。您还需要权限Calendars.Read.Shared和/或Calendars.ReadWrite.Shared(您似乎已经获得)。如果您在没有用户
的情况下 获得访问权限,则不需要日历共享,因为您会自动拥有对所有用户的完全访问权限。

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

于 2018-08-02T15:43:55.987 回答
1

网址应该类似于Users('anotheruser')/events. 既然你直接说anotheruser/events。该服务未将另一个用户识别为有效段并引发错误。

于 2018-08-02T15:02:39.840 回答