我正在尝试允许用户将项目添加到其他用户的日历中。 用户登录并按以下方式获取令牌
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
已获得管理员身份验证同意,所以一切都很好。
有什么建议吗?
答案 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
。该服务未将其他用户识别为有效段,并抛出错误。