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.

Imagen 1: Package

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.

Imagen 2: ApplicationUser.cs

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:

Imagen 3: IdentityRole

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.

Imagen 4: ApplicationUser

Para asignar unos roles por defecto a los usuarios que vamos a generar:

Imagen 5: IdentityUserRole

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:

Imagen 6: ApplicationDbContext.cs

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:

Imagen 7: Database Tables

  • Autor: Borja Viejo Cabanillas
  • Curso: Desarrollo Web Full Stack, MultiCloud y Multiplataforma
  • Centro: Tajamar
  • Año académico: 2021-2022

Leave a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.