我正在构建一个应用程序,该应用程序需要能够在 ms-graph 的帮助下从特定 Sharepoint 站点上的文档库中读取角色分配。Sites.Selected API 权限几乎适用于我的用例,但由于某种原因,我无法在没有 Sites.FullControl.All 的情况下检索文档库上的所有角色分配。我仍然可以从文档库下的文件夹和文件中检索角色。
使用下面的代码,我可以看到“James Doe”对库具有“写入”权限,而Sites.FullControl.All对我的应用程序注册处于活动状态,没有它,角色属性不包含任何元素
var docLibs = await graphServiceClient.Sites[this.siteId].Drives
.Request().GetAsync();
foreach (var docLib in docLibs){
var perms = await graphServiceClient.Sites[siteId].Drives[$"{docLib.Id}"]
.Root.Permissions.Request().GetAsync();
foreach (var perm in perms) {
Console.WriteLine($"{perm.GrantedTo.User.DisplayName} - {Perm.Roles.ToList().Count}");
}
}
// With Sites.Selected (using ['write'] permission):
// ==> James Doe - 0
// With Sites.FullControl.All:
// ==> James Doe - 1
我尝试了许多其他 API 权限,但只有Sites.FullControl.All似乎可以正确读取角色分配。我正在寻找一种特权较低的替代方案,它仍然可以读取文档库上的角色分配。
最好的解决方案是Sites.Selected可以接受类似于
// POST https://graph.microsoft.com/v1.0/sites/<...>/permissions
{
"roles": [
"sp.full control" // Instead of 'write'
],
"grantedToIdentities": [
{
"application": {
"id": "11111111-1111-1111-1111-111111111111",
"displayName": "My graph App"
}
}
]
}
仅将应用程序FullControl授予特定站点。但是,除了对端点进行读写之外,我还没有看到任何人能够使用角色。