How do I get User Roles based on Username?
UserRoles roles = user.Roles;
string role = roles.GetEnumerator().ToString();
If I have a user, I can get it like this. But how do I get the roles when all I have is a Username?
To get a user by a username you can use :
public class UserRepository
{
public static User GetUser(string domainName, string userName)
{
if (User.Exists(domainName + @"\" + userName))
{
return User.FromName(domainName + @"\" + userName, true);
}
return null;
}
}
To get a user roles you can use
Sitecore.Security.Accounts.User user = UserRepository.GetUser("yourdomain","youruserName");
if (user==null) return;
var rolesList = user.Roles.ToList();
foreach(var role in rolesList)
{
var roleName = role.DisplayName;
var roleDomain = role.Domain;
// you have all the properties of a role in role object
}
Perhaps you want to extract a list of users and their roles into a report.
$users = Get-User -Filter * | Where-Object { $_.Roles.Count -gt 0 }
$records = [System.Collections.ArrayList]@()
foreach($user in $users) {
$record = [PSCustomObject]@{
"Username" = $user.Name
"Roles" = ($user.Roles | Select-Object -ExpandProperty Name) -join ","
}
$records.Add($record) > $null
}
$records