Поделитесь папкой в ​​onedrive pro через csom

Я создаю папку, используя этот код:

       context.Credentials = new SharePointOnlineCredentials(username, password);
        //login in to SharePoint online
        context.ExecuteQuery();
        //OneDrive is acctually a Document list
        List docs = context.Web.Lists.GetByTitle("Documents");
        context.ExecuteQuery();
        context.Web.Folders.Add("https://xxx-my.sharepoint.com/personal/xx_xx-xx_xx/Documents/myforder1");
        context.ExecuteQuery();

Все работает нормально

Теперь я хочу поделиться этой папкой.

Кто-нибудь знает, как поделиться папкой в ​​onedrive с помощью csom в С#?


person sly    schedule 21.10.2014    source источник


Ответы (1)


Как поделиться элементом списка с помощью CSOM

Для совместного использования объекта List Item можно использовать следующий метод:

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();
}

Пример

В следующем примере показано, как предоставить разрешения Read каждому пользователю (для этой цели мы используем группу безопасности с именем Everyone в SPO)

using(var ctx = new ClientContext(webUrl))
{     
   ctx.Credentials = new SharePointOnlineCredentials(userName,securePassword);

   var list = ctx.Web.Lists.GetByTitle(listTitle);
   var listItem = list.GetItemById(listItemId);             //get Folder item by Id
   var everyoneSecGroup = ctx.Web.SiteUsers.GetById(4);     //get Everyone security group            
   ShareListItem(listItem,everyoneSecGroup, "Read");
}

Результат

введите здесь описание изображения

Обновить

Как перечислить определения ролей и напечатать имя разрешения:

var roleDefinitions = ctx.Site.RootWeb.RoleDefinitions;
ctx.Load(roleDefinitions);
ctx.ExecuteQuery();
foreach (var roleDef in roleDefinitions)
{
    Console.WriteLine(roleDef.Name);
} 
person Vadim Gremyachev    schedule 21.10.2014
comment
Спасибо. Но когда я запускаю сценарий, у меня возникает ошибка «Невозможность проверки авторизации». это означает, что невозможно найти уровень авторизации, проблема в этой строке var roleDefinition = ctx.Site.RootWeb.RoleDefinitions.GetByName(permissionLevelName); У вас есть идея? - person sly; 22.10.2014
comment
Убедитесь, что указано правильное имя разрешения, подробности см. в разделе обновления ответа. - person Vadim Gremyachev; 22.10.2014
comment
Имя разрешения локализовано, поэтому необходимо определить правильное. спасибо ! - person sly; 28.10.2014