【问题标题】:Get all the users based on a specific permission using CSOM in SharePoint 2013在 SharePoint 2013 中使用 CSOM 根据特定权限获取所有用户
【发布时间】:2015-03-07 21:30:31
【问题描述】:

我想获取在站点上具有特定角色/权限的所有用户的列表。例如,我需要在 SharePoint 2013 中使用 .Net CSOM 拥有编辑权限 (RoleType=Editor) 的用户列表。他们可以在任何组中。我尝试了很多东西。但是,似乎没有直接的方法可以做到这一点。有任何想法吗?

提前致谢。

【问题讨论】:

    标签: sharepoint permissions sharepoint-2013 csom


    【解决方案1】:

    您可以利用Web.GetUserEffectivePermissions method 来获取指定用户在网站内的有效权限。

    示例 1:通过权限获取用户

    第一个示例演示如何通过权限检索用户,特别是可以编辑列表项的用户(使用PermissionKind.EditListItems):

    using (var ctx = new ClientContext(webUri))
    {
          //Retrieve site users             
          var users = ctx.LoadQuery(ctx.Web.SiteUsers.Where(u => u.PrincipalType == PrincipalType.User));
          ctx.ExecuteQuery();
          //Retrieve users permissions
          var userPermissionsResults = users.ToDictionary(user => user, user => ctx.Web.GetUserEffectivePermissions(user.LoginName));
          ctx.ExecuteQuery();
          //Filter the users who can edit list items      
          var usersCanEditListItems = new List<User>();
          foreach (var result in userPermissionsResults)
          {
              var user = result.Key;
              var userPermissions = result.Value.Value;
              if (userPermissions.Has(PermissionKind.EditListItems))
              {
                 usersCanEditListItems.Add(user);
              }
          }
     }
    

    示例 2:按角色获取用户

    角色类型或权限级别的情况下,示例变得有点复杂,因为我们需要:

    • 检索角色类型的权限列表(步骤 1 和 2)
    • 获取具有权限的用户(步骤 3 和 4)
    • 按角色权限过滤用户(第 5 步)

    例子:

    using (var ctx = new ClientContext(webUri))
    {
    
         //1.Retrieve role definition 
         var roleDef = ctx.Web.RoleDefinitions.GetByType(RoleType.Editor);
         ctx.Load(roleDef);
         ctx.ExecuteQuery();
         //2.Get permission levels for role 
         var permLevelNames = Enum.GetNames(typeof (PermissionKind));
         var permissionLevels = permLevelNames.Select(permLevelName => (PermissionKind) Enum.Parse(typeof (PermissionKind), permLevelName)).Where(permissionLevel => roleDef.BasePermissions.Has(permissionLevel)).ToList();
    
         //3.Retrieve users
         var users = ctx.LoadQuery(ctx.Web.SiteUsers.Where(u => u.PrincipalType == PrincipalType.User ));
         ctx.ExecuteQuery();
         //4.Retrieve users permissions
         var userPermissionsResults = users.ToDictionary(user => user, user => ctx.Web.GetUserEffectivePermissions(user.LoginName));
         ctx.ExecuteQuery();
    
         //5.Filter users by role
         var editorUsers = new List<User>();
         foreach (var result in userPermissionsResults)
         {
             var user = result.Key;
             var userPermissions = result.Value.Value;
             var hasPermissions = permissionLevels.All(userPermissions.Has); //has the same permissions?
             if (hasPermissions)
             {
                 editorUsers.Add(user);
             }
         }
     }  
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2017-08-03
      • 2016-02-22
      • 2015-06-22
      相关资源
      最近更新 更多