You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 03:57:03