我已经成功地使用Sharepoint CMOS API与一个组共享OneDrive for Business文件。
像这样:
context.Load(listItem, l => l.HasUniqueRoleAssignments);
context.ExecuteQuery();
if (!listItem.HasUniqueRoleAssignments)
{
listItem.BreakRoleInheritance(true, false);
}
var group = context.Web.SiteGroups.GetByName(groupName);
context.Load(context.Site.RootWeb, w => w.RoleDefinitions);
context.ExecuteQuery();
var roleTypeKind = readOnly ? RoleType.Reader : RoleType.Editor;
var role = context.Site.RootWeb.RoleDefinitions.FirstOrDefault(rd => rd.RoleTypeKind == roleTypeKind);
var roleDefCollection = new RoleDefinitionBindingCollection(context) { role };
listItem.RoleAssignments.Add(group, roleDefCollection);
context.ExecuteQuery();
但问题是该组属于SiteGroups,它对一个用户来说是本地的。因此,如果我有Azure AD组,则无法使用Sharepoint API访问它。
我可以使用GraphClient API找到Azure AD组,如下所示:
var azuregroup = activeDirectoryClient.Groups
.Where(g=> g.DisplayName.Equals("groupname"))
.ExecuteAsync().Result.CurrentPage.ToList().First() as Group;
但是如何使用/ any API授予该组访问该文件的权限?应该可以在OneDrive for Business UI中实现。
不可能这样做
listItem.RoleAssignments.Add(azuregroup, roleDefCollection);
因为Add的第一个参数必须是azuregroup不是的Principal。
希望任何人都可以提供帮助 - 我已经在互联网上搜索了无数个小时。