9.5.2 Creando las tablas para validar permisos por cada tabla

Agregar permisos para crear, borrar, modificar, consultar a cada tabla

Debido a que la seguridad basada en tokens solo verifica con los claims que se agregaron en el login, si luego por ejemplo un usuario ya no tiene ese claim, solo se le actualizara la lista de claims en el token hasta el momento en que el usuario vuelva a iniciar sesión y obtenga un token nuevo.

Existe otra forma de validar los servicios con seguridad basada en directivas la cual te permite agregar la validación antes de ejecutar cada servicio.

Para este ejemplo a cada tabla le vamos a dar sus propios permisos para Crear, Borrar, Modificar, Consultar. Otros permisos pueden ser Autorizar, Cancelar.

Creamos un modelo para nuestra tabla Permiso

Permiso.cs
public class Permiso
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Required(ErrorMessage = "Required")]
    public int Clave { get; set; }

    [Column(TypeName = "VARCHAR(100)")]
    public string Nombre { get; set; }
}

Agregamos los insert a nuestra tabla permisos y la tabla Tabla en nuestro archivo CaducaContext

CaducaContext.cs
public class CaducaContext : DbContext
{          
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        //código
        #region Inserts
        modelBuilder.Entity<Permiso>().HasData(
            new Permiso
            {
                Id = 1,
                Clave = 1,
                Nombre = "Crear",
            },
            new Permiso
            {
                Id = 2,
                Clave = 2,
                Nombre = "Modificar",
            },
            new Permiso
            {
                Id = 3,
                Clave = 3,
                Nombre = "Borrar",
            },
            new Permiso
            {
                Id = 4,
                Clave = 4,
                Nombre = "Consultar",
            });
        modelBuilder.Entity<Tabla>().HasData(
            new Tabla
            {
                Id = 1,
                Nombre = "Caducidad",
                Descripción = "Permite registrar las fechas de " +
                  " caducidad de los productos"
            },
            new Tabla
            {
                Id = 2,
                Nombre = "Categoria",
                Descripción = "Permite registrar las categorias de" +
                  " los productos"
            },
            new Tabla
            {
                Id = 3,
                Nombre = "Cliente",
                Descripción = "Permite registrar los clientes"
            },
            new Tabla
            {
                Id = 4,
                Nombre = "ClienteCategoria",
                Descripción = "Permite registrar las categorías " +
                  "de productos de cada cliente"
            },
            new Tabla
            {
                Id = 5,
                Nombre = "Producto",
                Descripción = "Permite registrar los productos"
            },
            new Tabla
            {
                Id = 6,
                Nombre = "Permiso",
                Descripción = "Permite registrar los permisos para " +              
                 " el sistema"
            },
            new Tabla
            {
                Id = 7,
                Nombre = "Producto",
                Descripción = "Permite registrar los productos"
            },
            new Tabla
            {
                Id = 8,
                Nombre = "Rol",
                Descripción = "Permite registrar los roles de " +
                     " los usuarios"
            },
            new Tabla
            {
                Id = 9,
                Nombre = "Usuario",
                Descripción = "Permite registrar los usuarios del sistema"
            },
            new Tabla
            {
                Id = 10,
                Nombre = "UsuarioCategoria",
                Descripción = "Permite registrar las categorias de " +
                  " los usuarios del sistema"
            },
            new Tabla
            {
                Id = 11,
                Nombre = "UsuarioCliente",
                Descripción = "Permite registrar los clientes para " +
                  "los usuarios del sistema"
            },
            new Tabla
            {
                Id = 12,
                Nombre = "UsuarioRol",
                Descripción = "Permite registrar los roles para " +
                 "los usuarios del sistema"
            });
       #endregion Inserts

Agregamos un nuevo modelo TablaPermiso el cual nos indicará que permisos tiene cada tabla.

TablaPermiso.cs
public class TablaPermiso
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    public int TablaId { get; set; }

    public int PermisoId { get; set; }
}

Creamos los inserts para nuestras tablas para TablaPermiso, para el ejemplo solo lo voy a agregar a las tabla Categorias, Clientes, Productos y Usuarios. La tabla usuarios solo va a ser accesible para los usuarios Administradores.

CaducaContext.cs
public class CaducaContext : DbContext
{          
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        //código
        #region Inserts
        modelBuilder.Entity<TablaPermiso>().HasData(
               new TablaPermiso
               {
                   Id = 1,
                   PermisoId = 1,
                   TablaId = 2
               },
                new TablaPermiso
                {
                    Id = 2,
                    PermisoId = 2,
                    TablaId = 2
                },
               new TablaPermiso
               {
                   Id = 3,
                   PermisoId = 3,
                   TablaId = 2
               },
                new TablaPermiso
                {
                    Id = 4,
                    PermisoId = 4,
                    TablaId = 2
                },
                new TablaPermiso
                {
                    Id = 5,
                    PermisoId = 1,
                    TablaId = 3
                },
                new TablaPermiso
                {
                    Id = 6,
                    PermisoId = 2,
                    TablaId = 3
                },
               new TablaPermiso
               {
                   Id = 7,
                   PermisoId = 3,
                   TablaId = 3
               },
                new TablaPermiso
                {
                    Id = 8,
                    PermisoId = 4,
                    TablaId = 3
                },
                new TablaPermiso
                {
                    Id = 9,
                    PermisoId = 1,
                    TablaId = 5
                },
                new TablaPermiso
                {
                    Id = 10,
                    PermisoId = 2,
                    TablaId = 5
                },
               new TablaPermiso
               {
                   Id = 11,
                   PermisoId = 3,
                   TablaId = 5
               },
                new TablaPermiso
                {
                    Id = 12,
                    PermisoId = 4,
                    TablaId = 5
                }
           );
     }
     

Creamos ahora una tabla para indicar por cada rol las acciones que pude realizar en las tablas.

RolTablaPermiso.cs
public class RolTablaPermiso
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [Required(ErrorMessage = "Required")]
    public int TablaPermisoId { get; set; }

    [Required(ErrorMessage = "Required")]
    public int RolId { get; set; }

    [Required(ErrorMessage = "Required")]
    public bool TienePermiso { get; set; }
}

Agregamos los permisos a las tablas

CaducaContext.cs
public class CaducaContext : DbContext
{          
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        //código
        #region Inserts
        modelBuilder.Entity<RolTablaPermiso>().HasData(
                new RolTablaPermiso
                { 
                    Id = 1,
                    TablaPermisoId = 1,
                    RolId = 4,
                    TienePermiso = true
                },
                new RolTablaPermiso
                {
                    Id = 2,
                    TablaPermisoId = 2,
                    RolId = 4,
                    TienePermiso = true
                },
                new RolTablaPermiso
                {
                    Id = 3,
                    TablaPermisoId = 3,
                    RolId = 4,
                    TienePermiso = true
                },
                new RolTablaPermiso
                {
                    Id = 4,
                    TablaPermisoId = 4,
                    RolId = 4,
                    TienePermiso = true
                },
                new RolTablaPermiso
                {
                    Id = 5,
                    TablaPermisoId = 4,
                    RolId = 2,
                    TienePermiso = true
                },
                new RolTablaPermiso
                {
                    Id = 6,
                    TablaPermisoId = 4,
                    RolId = 3,
                    TienePermiso = true
                },


                new RolTablaPermiso
                {
                    Id = 7,
                    TablaPermisoId = 5,
                    RolId = 4,
                    TienePermiso = true
                },
                new RolTablaPermiso
                {
                    Id = 8,
                    TablaPermisoId = 6,
                    RolId = 4,
                    TienePermiso = true
                },
                new RolTablaPermiso
                {
                    Id = 9,
                    TablaPermisoId = 7,
                    RolId = 4,
                    TienePermiso = true
                },
                new RolTablaPermiso
                {
                    Id = 10,
                    TablaPermisoId = 8,
                    RolId = 4,
                    TienePermiso = true
                },
                new RolTablaPermiso
                {
                    Id = 11,
                    TablaPermisoId = 8,
                    RolId = 2,
                    TienePermiso = true
                },


                new RolTablaPermiso
                {
                    Id = 12,
                    TablaPermisoId = 9,
                    RolId = 4,
                    TienePermiso = true
                },
                new RolTablaPermiso
                {
                    Id = 13,
                    TablaPermisoId = 10,
                    RolId = 4,
                    TienePermiso = true
                },
                new RolTablaPermiso
                {
                    Id = 14,
                    TablaPermisoId = 11,
                    RolId = 4,
                    TienePermiso = true
                },
                new RolTablaPermiso
                {
                    Id = 15,
                    TablaPermisoId = 12,
                    RolId = 4,
                    TienePermiso = true
                },
                new RolTablaPermiso
                {
                    Id = 16,
                    TablaPermisoId = 12,
                    RolId = 2,
                    TienePermiso = true
                },
                new RolTablaPermiso
                {
                    Id = 17,
                    TablaPermisoId = 12,
                    RolId = 3,
                    TienePermiso = true
                }
              );

Last updated