【问题标题】:Determine which list a provider hosted application has access to确定提供商托管应用程序有权访问的列表
【发布时间】:2015-02-13 17:55:21
【问题描述】:

我创建了一个简单的 Provider Hosted App(直接从 Visual Studio 2013 中取出)

应用已在应用清单中授予“读取列表权限”。

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

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

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

【问题讨论】:

    标签: csom sharepoint-online


    【解决方案1】:

    要确定用户已授予读取权限的列表,您可以考虑以下方法:

    示例

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

    【讨论】:

      猜你喜欢
      • 2014-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      • 1970-01-01
      相关资源
      最近更新 更多