¿Cómo puedo recuperar todos los roles (grupos) de un usuario es miembro de?
-
11-09-2019 - |
Pregunta
¿Hay una manera de obtener una lista de papeles un usuario de Windows autenticado se encuentra, sin comprobar de forma explícita por el método WindowsPrincipal.IsInRole
?
Solución
WindowsPrincipal.IsInRole
simplemente comprueba si el usuario es un miembro del grupo con ese nombre; un grupo de Windows es un Papel. Usted puede obtener una lista de los grupos que un usuario es miembro de la propiedad de WindowsIdentity.Groups
.
Puede obtener WindowsIdentity
de su WindowsPrincipal
:
WindowsIdentity identity = WindowsPrincipal.Identity as WindowsIdentity;
o se puede obtener de un método de fábrica en WindowsIdentity:
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsIdenity.Groups
es una colección de IdentityReference
la que sólo te da el SID del grupo. Si necesita los nombres de los grupos tendrá que traducir el IdentityReference
en un NTAccount
y obtener el valor:
var groupNames = from id in identity.Groups
select id.Translate(typeof(NTAccount)).Value;
Otros consejos
EDIT: Josh me ganó de mano! :)
Probar
using System;
using System.Security.Principal;
namespace ConsoleApplication5
{
internal class Program
{
private static void Main(string[] args)
{
var identity = WindowsIdentity.GetCurrent();
foreach (var groupId in identity.Groups)
{
var group = groupId.Translate(typeof (NTAccount));
Console.WriteLine(group);
}
}
}
}
Si no está conectado al servidor de dominio, la función Translate
puede lanzar el siguiente The trust relationship between this workstation and the primary domain failed.
excepción
Sin embargo, para la mayoría de los grupos, que estará bien, así que uso:
foreach(var s in WindowsIdentity.GetCurrent().Groups) {
try {
IdentityReference grp = s.Translate(typeof (NTAccount));
groups.Add(grp.Value);
}
catch(Exception) { }
}
En un sitio ASP.NET MVC, puede hacerlo de esta manera:
Agregue esto a su Web.config:
<system.web>
...
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" />
...
</system.web>
A continuación, puede utilizar Roles.GetRolesForUser()
para obtener todos los grupos de Windows que el usuario es miembro de. Asegúrese de que está using System.Web.Security
.