tag route net for data asp all asp.net-core asp.net-identity asp.net-core-mvc asp.net-core-1.0

asp.net core - route - Obtener usuario con roles asignados



tag helpers asp net core (1)

UserManager no carga las relaciones de manera predeterminada.

La inclusión manual es una buena manera, pero como se indica aquí , las relaciones M: N directas aún no son compatibles con EntityFramework Core.

Entonces, hay dos maneras en que veo:

(El preferido) Uso

userManager.GetRolesAsync(user);

Esto devolverá una List<string> con los nombres de roles del usuario. O utilice alguna consulta de EF para obtener un objeto IdentityRole unido a IdentityUserRole. Desafortunadamente, esto requiere una aceptación con el hecho de que los roles no estarán directamente en la entidad del usuario.

O puede implementar IdentityUserRole personalizado, crear una relación con IdentityRole allí y luego consultarlo con `

Include(user => user.Roles).ThenInclude(role => role.Role)

Cómo implementar las propias entidades de identidad se describe, por ejemplo, aquí . Pero es un enfoque complicado y los objetos de Role se anidarán en las entidades vinculantes.

Sin embargo, puede declarar una propiedad en su ApplicationUser :

[NotMapped] public List<string> RoleNames {get; set;}

y utilizarlo en ti libre voluntad ...

Utilizando la identidad ASP.NET Core, creo un nuevo usuario con UserManager.CreateAsync() y los asigno a una función existente con UserManager.AddToRoleAsync . Esto funciona, ya que la realización entre usuario y rol se almacena en la tabla AspNetUserRoles de la base de datos.

Pero cuando recojo al usuario usando el UserManager (por ejemplo, el método UserManager.FindByMail() ), la lista de Role está vacía. También probé la función Include de EF de esta manera:

var user = userManager.Users.Include(u => u.Roles).FirstOrDefault(u => u.Email == "[email protected]");

Esto me dio el Ids de la tabla de asociación n: m, que no es muy útil ya que necesito los nombres de los roles. Tampoco es posible Roles con una segunda consulta, ya que el atributo Roles del usuario de identidad es de solo lectura. Esperaría obtener una List<string> de los nombres de rol. No se pudo encontrar ninguna información sobre esto.

Para mí, la única solución parece agregar un atributo personalizado a mi usuario y completarlos con los datos, que obtengo usando una segunda consulta. Pero esa no es una buena solución. No puedo creer que ASP.NET Core Identity no tenga una mejor manera de obtener esos datos ...