サイトで特定の役割/権限を持つすべてのユーザーのリストを取得したいと思います。例えば、私が使用して編集権限(RoleType =編集)を持っているユーザーのリストを必要とするネットCSOMをSharePointの2013年に彼らがどのグループにすることができます。私は多くのことを試みました。ただし、これを行う簡単な方法はないようです。何か案は?
よろしくお願いします。
Web.GetUserEffectivePermissionsメソッドを利用して、指定したユーザーがWebサイト内で持つ有効なアクセス許可を取得できます。
例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:ユーザーを役割別に取得する
以下の場合、ロールタイプまたは権限レベルの例では、私たちがする必要があるため、もう少し複雑になります:
例:
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);
}
}
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加