Tienda MiCholo utiliza el sistema de control de acceso basado en roles (RBAC) de ASP.NET Core Identity. Cada usuario del sistema tiene asignado exactamente un rol, y ese rol determina a qué secciones de la aplicación puede acceder. Los roles se crean automáticamente al iniciar la aplicación a través deDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/interezante456-pixel/proyecto-dise-o/llms.txt
Use this file to discover all available pages before exploring further.
SeedData.Initialize y se aplican mediante atributos [Authorize] y [Authorize(Roles = "...")] en los controladores. Las rutas protegidas redirigen a los usuarios no autenticados a /Account/Login y a los usuarios sin permisos suficientes a /Account/AccessDenied.
Roles disponibles
El sistema incluye dos roles integrados que se crean al iniciar la aplicación por primera vez:| Rol | Descripción | Accesos |
|---|---|---|
| Admin | Administrador total del sistema | Inventario (CRUD completo), Proveedores (CRUD completo), Usuarios (CRUD completo), Ventas (registrar y ver), Reportes, Dashboard |
| Vendedor | Personal de ventas | Ver inventario y categorías, Registrar y ver ventas, Ver reportes, Dashboard |
Restricciones por módulo
Cada controlador tiene su propia estrategia de autorización. A continuación se detalla cómo está protegido cada módulo:ProductoController — Inventario
ProductoController — Inventario
La clase entera está marcada con
[Authorize], por lo que tanto Admin como Vendedor pueden acceder al inventario. Sin embargo, las acciones de escritura (crear, editar, activar/desactivar y eliminar) tienen además [Authorize(Roles = "Admin")], lo que las restringe exclusivamente al rol administrador.| Acción | Restricción |
|---|---|
Listar | [Authorize] — ambos roles |
DashboardAlertas | [Authorize] — ambos roles |
Categorias | [Authorize] — ambos roles |
Nuevo (GET y POST) | [Authorize(Roles = "Admin")] |
Editar (GET y POST) | [Authorize(Roles = "Admin")] |
ToggleActivo | [Authorize(Roles = "Admin")] |
Eliminar | [Authorize(Roles = "Admin")] |
ProveedorController — Proveedores
ProveedorController — Proveedores
La clase completa está decorada con
[Authorize(Roles = "Admin")]. Ninguna acción de este controlador es accesible para usuarios con rol Vendedor.| Acción | Restricción |
|---|---|
Listar | [Authorize(Roles = "Admin")] |
Nuevo (GET y POST) | [Authorize(Roles = "Admin")] |
Editar (GET y POST) | [Authorize(Roles = "Admin")] |
Eliminar | [Authorize(Roles = "Admin")] |
VentaController — Ventas
VentaController — Ventas
La clase entera está marcada con
[Authorize] sin especificar roles, por lo que ambos roles (Admin y Vendedor) pueden registrar y consultar ventas.| Acción | Restricción |
|---|---|
| Todas las acciones | [Authorize] — ambos roles |
UsuarioController — Gestión de usuarios
UsuarioController — Gestión de usuarios
La clase entera está marcada con
[Authorize(Roles = "Admin")]. La gestión de cuentas es exclusiva del administrador; los vendedores no tienen acceso a ninguna acción de este controlador.| Acción | Restricción |
|---|---|
Index | [Authorize(Roles = "Admin")] |
Crear (GET y POST) | [Authorize(Roles = "Admin")] |
Editar (GET y POST) | [Authorize(Roles = "Admin")] |
Eliminar | [Authorize(Roles = "Admin")] |
ReporteController — Reportes
ReporteController — Reportes
La clase no tiene
[Authorize] a nivel de clase. Los reportes son accesibles para cualquier usuario autenticado sin restricción de rol adicional.| Acción | Restricción |
|---|---|
| Todas las acciones | Sin restricción de rol explícita |
HomeController — Dashboard
HomeController — Dashboard
La clase no tiene atributo
[Authorize]. El dashboard y las vistas generales son accesibles sin requerir autenticación ni rol específico.| Acción | Restricción |
|---|---|
| Todas las acciones | Sin restricción de autenticación explícita |
Cómo se aplican los roles
La configuración de autenticación enProgram.cs establece ASP.NET Core Identity con autenticación basada en cookies. Las rutas de redirección están definidas explícitamente:
Usuario no autenticado
Al intentar acceder a cualquier ruta protegida con
[Authorize], el middleware redirige automáticamente a /Account/Login. Tras iniciar sesión correctamente, el usuario es redirigido a /Producto/Listar.Usuario sin permisos suficientes
Si un usuario autenticado intenta acceder a una ruta que requiere un rol que no posee (por ejemplo, un Vendedor intentando acceder a
/Usuario/Index), el middleware redirige a /Account/AccessDenied.app.UseAuthentication()) se registra antes que el de autorización (app.UseAuthorization()) en el pipeline de Program.cs, garantizando que la identidad del usuario esté disponible cuando se evalúen los permisos.
Cuentas semilla
Al iniciar la aplicación por primera vez,SeedData.Initialize crea automáticamente las siguientes cuentas preconfiguradas:
| Contraseña | Rol | |
|---|---|---|
admin@micholo.com | admin123 | Admin |
vendedor@micholo.com | Vendedor123 | Vendedor |