确定提供者托管应用程序可以访问的列表

时间:2015-01-15 18:09:55

标签: csom sharepoint-online

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

该应用已被授予"阅读列表权限"在应用程序清单中。

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

我无法弄清楚应用程序的MVC Provider Hosted Web部分如何确定最终用户授予其读取权限的SharePoint列表。

可以假设它有某种令牌来告诉它可以读取哪个列表?或者是他们的CSOM / JSOM调用,它将显示它可以访问哪个列表?

1 个答案:

答案 0 :(得分: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);
            }
     }
}