如何确定当前用户是否可以在SharePoint Online / Office365中查看列表项或读取列表?
我有一些返回列表的工作代码
// Retrieve all lists from the server.
context.Load(web.Lists,
lists => lists.Include(list => list.Title,
list => list.Id,
list => list.Hidden,
list => list.BaseTemplate,
list => list.BaseType));
// Execute query.
context.ExecuteQuery();
// Enumerate the web.Lists.
foreach (List list in web.Lists)
{
if (list.Hidden ||
list.BaseType != BaseType.GenericList) continue;
// .... check permissions here before adding ...
names.Add(list.Id.ToString(), list.Title);
}
但我不知道如何测试当前用户是否可以访问列表项。
答案 0 :(得分:2)
修改后的示例
ctx.Load(web.Lists,
lists => lists.Include(list => list.Title,
list => list.Id,
list => list.Hidden,
list => list.BaseTemplate,
list => list.BaseType,
list => list.EffectiveBasePermissions));
ctx.ExecuteQuery();
foreach (List list in web.Lists)
{
if (list.Hidden ||
list.BaseType != BaseType.GenericList) continue;
if (!list.EffectiveBasePermissions.Has(PermissionKind.ViewListItems)) continue; //verity List permissions
}
答案 1 :(得分:0)
您可能需要考虑在群组级别执行此操作。这将要求您基于此组设置访问权限或在现有组访问权限之上进行分层,但这非常简单(如果需要,我可以在那里详细介绍)。以下是此方法的一些好处:
这些可能不适用于您,但是检查用户是否在特定群组中相对容易。这是一个示例函数,它将返回组中的所有用户。您可能希望将其缓存到某处并检查当前用户。
public List<User> GetGroupUsersList(string GroupName)
{
var retval = new List<User>();
ClientContext context = GetContext();
var groupList = context.Web.SiteGroups;
context.Load(groupList);
context.ExecuteQuery();
var grp = groupList.Where(x => x.Title == GroupName).FirstOrDefault();
context.Load(grp, y => y.Title, y => y.Users);
context.ExecuteQuery();
if (grp != null && grp.Users != null)
{
foreach (var usr in grp.Users)
{
retval.Add(usr);
}
}
return retval;
}