2015-01-15 2 views
0

Я создал простой Provider Hosted App (прямо из коробки Visual Studio 2013)Определите, какой список поставщик принимал приложение имеет доступ к

Приложение было предоставлено «Read Список разрешений» в приложении манифеста.

Когда приложение развернуто, SharePoint Online просит пользователя выбрать список, к которому приложение может получить доступ. Это должно дать ему право читать один конкретный список в Host Web.

Я не могу понять, как поставщик MVC Hosted Web-часть приложения фактически определяет список SharePoint, который конечный пользователь предоставил ему для чтения.

Предположительно, он получает какой-то токен, чтобы сообщить ему, какой список он может читать? Или их вызов CSOM/JSOM, который покажет, к какому списку он может получить доступ?

ответ

0

Чтобы определить, какой список пользователь предоставил разрешение на чтение можно рассмотреть следующий подход:

Пример

1) Для текущего пользователя

using (var ctx = new ClientContext(webUri)) 
{ 
     var web = ctx.Web; 

     ctx.Load(web.Lists, 
      lists => lists.Include(list => list.Title, 
            list => list.EffectiveBasePermissions)); 

     ctx.ExecuteQuery(); 
     var currentUserLists = web.Lists.Where(l => l.EffectiveBasePermissions.Has(PermissionKind.OpenItems)); 
} 

2) для любого пользователя

using (var ctx = new ClientContext(webUri)) 
{ 
    var web = ctx.Web; 

    //load lists 
    ctx.Load(web.Lists); 
    ctx.ExecuteQuery(); 
    //load lists permissions for a specified user 
    var listsPermissionsResults = web.Lists.ToDictionary(list => list, list => list.GetUserEffectivePermissions(loginName)); 
    ctx.ExecuteQuery(); 

    //filter lists where user has been granted permissions to open list 
    var userLists = new List<List>(); 
    foreach (var result in listsPermissionsResults) 
    { 
      var list = result.Key; 
      var listPermissions = result.Value.Value; 
      if (listPermissions.Has(PermissionKind.OpenItems)) 
      { 
       userLists.Add(list); 
      } 
    } 
}