CSOM 在 OneDrive 文件夹上设置共享

本文关键字:设置 共享 文件夹 OneDrive CSOM | 更新日期: 2023-09-27 18:37:08

我想在OneDrive中的文件夹上设置共享权限。 我知道那里有一篇关于列表项的帖子,但我需要在文件夹级别使用它。 首先,这是可能的还是我在浪费时间? 我尝试了以下方法:

我能够获取站点对象,但无法获取文件夹以共享它。 Web 对象没有可供枚举的文件夹。 它说它没有初始化。 下面的代码成功运行,但文件夹对象不起作用:

static void Main(string[] args)
    {
        var webUrl = "https://tenant-my.sharepoint.com/personal/me_tenant_com";
        var userName = "me";
        string securePassword = "mypassword";
        SecureString sec_pass = new SecureString();
        Array.ForEach(securePassword.ToArray(), sec_pass.AppendChar);
        using (var ctx = new ClientContext(webUrl))
        {
            ctx.Credentials = new SharePointOnlineCredentials(userName, sec_pass);
            var web = ctx.Web;
            ClientResult<Microsoft.SharePoint.Client.Utilities.PrincipalInfo> persons = Microsoft.SharePoint.Client.Utilities.Utility.ResolvePrincipal(ctx, ctx.Web, "dpunchak@AvvenireInc.com", Microsoft.SharePoint.Client.Utilities.PrincipalType.User, Microsoft.SharePoint.Client.Utilities.PrincipalSource.All, null, true);
            ctx.ExecuteQuery();
            var folder = ctx.Web.GetFolderByServerRelativeUrl("/documents/Test Folder");
            Microsoft.SharePoint.Client.Utilities.PrincipalInfo person = persons.Value;
            //ShareListItem(folder, person, "Read");
        }
    }
    public static void ShareListItem(ListItem listItem, Principal principal, string permissionLevelName)
    {
        var ctx = listItem.Context as ClientContext;
        var roleDefinition = ctx.Site.RootWeb.RoleDefinitions.GetByName(permissionLevelName);
        listItem.BreakRoleInheritance(true, false);
        var roleBindings = new RoleDefinitionBindingCollection(ctx) { roleDefinition };
        listItem.RoleAssignments.Add(principal, roleBindings);
        ctx.ExecuteQuery();

    }

CSOM 在 OneDrive 文件夹上设置共享

我认为您必须folder.ListItemAllFields属性传递给ShareListItem()

为避免收集尚未初始化错误,您可以尝试将RoleAssignments.Add()放在ctx.ExecuteQuery()内:

ctx.ExecuteQuery(listItem.RoleAssignments.Add(principal, roleBindings);