2016-03-02 7 views
0

Я хотел бы установить права доступа на папку в OneDrive. Я знаю, что есть сообщение о ListItems, но мне нужно это на уровне папки. Во-первых, это возможно или я трачу свое время? Я пробовал следующее:Совместное использование CSOM в папке OneDrive

Я могу получить объект сайта, но я не могу получить папку, чтобы поделиться ею. Веб-объект не имеет доступных для перечисления папок. В нем говорится, что он не инициализирован. Этот код ниже успешно работает, но объект папки не работает:

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, "[email protected]", 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(); 


    } 

ответ

1

Я думаю, что вы должны передать folder.ListItemAllFields свойства ShareListItem().

Чтобы избежать коллекции не был инициализирован ошибку, вы можете попробовать размещения RoleAssignments.Add() внутри ctx.ExecuteQuery():

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

 Смежные вопросы

  • Нет связанных вопросов^_^