Seed Identity Users & Roles con EF Core en .NET Core
A la hora de desarrollar un proyecto debemos ofrecer diferentes niveles de autorización a los usuarios de la aplicación. Por ejemplo, un usuario con el Role de administrador podrá acceder a la gestión de roles, mientras que los demás usuarios solo pueden gestionar su propio perfil.
Aquí vamos a definir distintos Roles, de tal forma que un grupo de usuarios pertenecientes a un role tendrán el mismo acceso o grado de autorización, y para ello disponemos de algunas herramientas como, por ejemplo, hacer uso de una semilla o seed.
Seeding
Seeding es el proceso de crear un set de datos inicial en la base de datos. Para conseguirlo, vamos a emplear .NET Core Identity & Entity Framework Core.
Los utilizaremos para crear algunos roles, usuarios y para asignar roles a usuarios.
Tenemos una clase ApplicationUser que hereda de IdentityUser. No añadimos ninguna propiedad en este caso, las que trae por defecto van a ser suficientes.
En una nueva clase estática que llamaremos ModelBuilderExtensions, vamos a crear el método Seed(). Aquí podemos agregar una lista de roles de la siguiente forma:
También vamos a agregar una lista de usuarios; a la hora de asignar una contraseña a cada usuario lo haremos mediante el método:
PasswordHasher<TUser>.HashPassword(TUser, String)
Que devuelve una representación con hash de la contraseña
proporcionada para el usuario
especificado.
Para asignar unos roles por defecto a los usuarios que vamos a generar:
Finalmente, nuestro DbContext va a heredar de IdentityDbContext<ApplicationUser> y vamos a hacer override al método OnModelCreating(ModelBuilder modelBuilder) y realizar una llamada a la Seed que acabamos de crear:
Añadimos una nueva migración y un update de la base de datos:
add-migration SeedRolesUsers
update-database
Podemos comprobar las tablas que hemos creado en SQL Server Management Studio:
- Autor: Borja Viejo Cabanillas
- Curso: Desarrollo Web Full Stack, MultiCloud y Multiplataforma
- Centro: Tajamar
- Año académico: 2021-2022