我创建了一个简单的提供商托管应用程序(直接从Visual Studio 2013框中)
该应用已被授予"阅读列表权限"在应用程序清单中。
部署应用程序时,SharePoint Online会要求用户选择应用程序可以访问的列表。这应该允许它读取主机Web上的一个特定列表。
我无法弄清楚应用程序的MVC Provider Hosted Web部分如何确定最终用户授予其读取权限的SharePoint列表。
可以假设它有某种令牌来告诉它可以读取哪个列表?或者是他们的CSOM / JSOM调用,它将显示它可以访问哪个列表?
答案 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);
}
}
}