确定提供商托管的应用程序有权访问哪个列表
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 调用会显示它可以访问哪个列表?
要确定用户授予了哪个列表的阅读权限,您可以考虑以下方法:
- 使用List.EffectiveBasePermissions property检索有效
分配给当前用户
的列表权限
- 使用BasePermissions.Has method by specifying PermissionKind.ViewListItems (or PermissionKind.OpenItems)判断当前用户是否可以访问列表
例子
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);
}
}
}
我创建了一个简单的提供商托管应用程序(直接从 Visual Studio 2013 盒子中取出)
该应用已在应用清单中被授予 "Read List Permissions"。
部署应用程序时,SharePoint Online 要求用户select 应用程序可以访问的列表。这应该允许它读取主机 Web 上的一个特定列表。
我无法弄清楚应用程序的 MVC 提供程序托管 Web 部分实际上如何确定最终用户已授予其读取权限的 SharePoint 列表。
假设它得到某种令牌来告诉它它可以读取哪个列表?还是他们的 CSOM/JSOM 调用会显示它可以访问哪个列表?
要确定用户授予了哪个列表的阅读权限,您可以考虑以下方法:
- 使用List.EffectiveBasePermissions property检索有效 分配给当前用户 的列表权限
- 使用BasePermissions.Has method by specifying PermissionKind.ViewListItems (or PermissionKind.OpenItems)判断当前用户是否可以访问列表
例子
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);
}
}
}