确定提供商托管的应用程序有权访问哪个列表

Determine which list a provider hosted application has access to

我创建了一个简单的提供商托管应用程序(直接从 Visual Studio 2013 盒子中取出)

该应用已在应用清单中被授予 "Read List Permissions"。

部署应用程序时,SharePoint Online 要求用户select 应用程序可以访问的列表。这应该允许它读取主机 Web 上的一个特定列表。

我无法弄清楚应用程序的 MVC 提供程序托管 Web 部分实际上如何确定最终用户已授予其读取权限的 SharePoint 列表。

假设它得到某种令牌来告诉它它可以读取哪个列表?还是他们的 CSOM/JSOM 调用会显示它可以访问哪个列表?

要确定用户授予了哪个列表的阅读权限,您可以考虑以下方法:

例子

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