使用Microsoft Graph API创建只读日历出现权限异常问题咨询
为什么创建日历时设置的CanEdit、IsRemovable不生效
CanEdit和IsRemovable是Microsoft Graph日历资源的只读计算属性,不是可配置的创建参数,服务端会直接忽略创建请求中对这两个字段的赋值。这两个字段的值由系统根据当前访问用户对日历的权限自动生成,日历的所有者默认拥有完整控制权限,所以对所有者而言这两个属性永远返回true,和你创建时的赋值没有关系。
如何让my@email.com用户对对应日历只有只读权限
你如果直接在my@email.com用户名下创建日历,该用户默认就是日历所有者,天生拥有完整的编辑、删除权限,不可能被直接剥夺。要实现目标需要调整实现逻辑:
- 第一步:使用其他账号作为日历的实际所有者(可以是企业管理员账号、专门的服务账号均可)创建日历
- 第二步:给
my@email.com用户授予该日历的只读共享权限 - 第三步:共享的日历会自动同步到
my@email.com的日历列表中
对应C#代码示例如下:
1. 所有者账号创建日历
var calendarToCreate = new Calendar { Name = "My read-only calendar" }; // 以所有者账号身份调用Graph接口创建日历 var newCalendar = await graphClient .Users["admin@yourdomain.com"] // 替换为实际所有者账号邮箱 .Calendars .Request() .AddAsync(calendarToCreate);
2. 给my@email.com授予只读权限
var shareInvite = new CalendarSharingInvite { Recipient = new Recipient { EmailAddress = new EmailAddress { Address = "my@email.com" } }, SendInvitation = true, Role = CalendarSharingActionType.View, Comment = "共享只读日历" }; await graphClient .Users["admin@yourdomain.com"] .Calendars[newCalendar.Id] .CalendarPermissions .Request() .AddAsync(shareInvite);
完成上述操作后,my@email.com访问该日历时,系统自动返回的CanEdit和IsRemovable属性值均为false,符合只读的需求。
内容的提问来源于stack exchange,提问作者Domenic
相关产品推荐
相关产品推荐

