2015-02-08 81 views
2

如何确定当前用户是否可以查看列表项或读取SharePoint Online/Office365中的列表?检查当前用户是否可以在SharePoint CSOM中查看列表

我有一个返回列表

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

一些工作代码,但我不知道如何测试自己当前的用户可以访问列表项目。

回答

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 

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

    } 
+0

我不同意,根本没有必要检索用户 – 2015-02-13 08:43:52

+1

我投了你的答案......好的知识。 – Madison 2015-02-13 11:16:26

相关问题