gpt4 book ai didi

sharepoint - 在 SharePoint 2013 中使用 CSOM 根据特定权限获取所有用户

转载 作者:行者123 更新时间:2023-12-01 00:56:03 27 4
gpt4 key购买 nike

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

提前致谢。

最佳答案

您可以使用 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);
    }
    }
    }

    关于sharepoint - 在 SharePoint 2013 中使用 CSOM 根据特定权限获取所有用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27862632/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com