我目前正在尝试从特定文件夹及其子项目制作副本。
这是用于复制文件夹的方法。
public async Task<DriveItem> CopyItem(DriveItem item)
{
var requestBody = new CopyPostRequestBody
{
//ParentReference = new ItemReference
//{
// DriveId = "6F7D00BF-FC4D-4E62-9769-6AEA81F3A21B",
// Id = "DCD0D3AD-8989-4F23-A5A2-2C086050513F",
//},
Name = item.Name + "Copy"
};
var result = await graphClient.Drives[driveID].Items[item.Id].Copy.PostAsync(requestBody);
if (result != null)
{
return result;
}
return null;
}
原始文件夹及其子项目已分配角色和权限。 如何复制具有权限的文件夹和子项目?
我还从网页版和问题站尝试了SharePoint的复制功能。权限不会复制到复制的版本。
我还想一一复制文件和文件夹并读取它们的权限并将其相应地应用于复制的项目。但这不是一个好主意,因为文件及其文件夹可能包含大量项目,并且会需要太多 api 调用,这对我来说不是一个选择。
这是应该由管理 Sharepoint 及其配置的公司配置的东西,还是我可以在代码中执行的操作?
Graph API 或 SharePoint API 均不支持复制 SharePoint (OneDrive) 文件夹(包括权限)。
复制文件夹后需要额外的步骤。我会知道,因为新文件夹可以继承新父文件夹的权限。
只是一个如何复制权限的建议(未经测试)
public async Task<DriveItem> CopyItem(DriveItem item)
{
var requestBody = new CopyPostRequestBody
{
//ParentReference = new ItemReference
//{
// DriveId = "6F7D00BF-FC4D-4E62-9769-6AEA81F3A21B",
// Id = "DCD0D3AD-8989-4F23-A5A2-2C086050513F",
//},
Name = item.Name + "Copy"
};
var result = await graphClient.Drives[driveID].Items[item.Id].Copy.PostAsync(requestBody);
if (result != null)
{
// read permissions
var response = await graphClient.Drives[driveID].Items[item.Id].Permissions.GetAsync();
foreach (var permission in response.Value)
{
// copy permission to copied item
await graphClient.Drives[driveID].Items[result.Id].Permissions.PostAsync(permission);
}
return result;
}
return null;
}