检查当前用户是否可以查看 SharePoint CSOM 中的列表
Checking if current user can view list in SharePoint CSOM
如何确定当前用户是否可以在 SharePoint Online/Office365 中查看列表项或阅读列表?
我有一些工作代码 returns 列表
// 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);
}
但我不知道如何测试当前用户是否可以访问列表项。
您可能要考虑在组级别执行此操作。这将需要您根据该组设置访问权限或在现有组访问权限之上分层,但这非常简单(如果需要,我可以在那里详细介绍)。以下是这种方法的一些好处:
- 您可以将一个组绑定到多个列表,这样您的代码可能会表现得更好
- 从技术上讲,每个列表项可能具有不同的安全性,因此单独检查每个项目可能表现不佳
这些可能不适用于您,但真正适用的是检查用户是否属于特定组相对容易。这是一个示例函数,它将 return 组中的所有用户。您可能希望将其缓存在某处并检查当前用户。
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;
}
- 使用List.EffectiveBasePermissions property检索有效
分配给当前用户
的列表权限
- 使用BasePermissions.Has method by specifying PermissionKind.ViewListItems
判断当前用户是否可以访问 List
修改示例
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
}
如何确定当前用户是否可以在 SharePoint Online/Office365 中查看列表项或阅读列表?
我有一些工作代码 returns 列表
// 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);
}
但我不知道如何测试当前用户是否可以访问列表项。
您可能要考虑在组级别执行此操作。这将需要您根据该组设置访问权限或在现有组访问权限之上分层,但这非常简单(如果需要,我可以在那里详细介绍)。以下是这种方法的一些好处:
- 您可以将一个组绑定到多个列表,这样您的代码可能会表现得更好
- 从技术上讲,每个列表项可能具有不同的安全性,因此单独检查每个项目可能表现不佳
这些可能不适用于您,但真正适用的是检查用户是否属于特定组相对容易。这是一个示例函数,它将 return 组中的所有用户。您可能希望将其缓存在某处并检查当前用户。
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;
}
- 使用List.EffectiveBasePermissions property检索有效 分配给当前用户 的列表权限
- 使用BasePermissions.Has method by specifying PermissionKind.ViewListItems 判断当前用户是否可以访问 List
修改示例
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
}