Namespace KadicAuth.Application.Permissions.Seeding
Classes
- PermissionAutoSeedHostedService
Runs once at application startup and seeds every permission declared in
KadicErp.Core.Abstractions.Authorization.Permissionsthat is not yet in the database. New permissions are automatically assigned to all active roles (and tenant roles, except platform-scoped codes) by the existing SeedPermissionsCommand handler.The seeder is idempotent. Existing permissions are skipped. It groups entries by module so that a missing module (unmapped / not yet provisioned in
Auth.Modules) does not abort the whole sweep.Controlled by
Permissions:AutoSeedOnStartup(default:true). Set tofalsein appsettings to disable (e.g. read-only envs).
- PermissionReflectionScanner
Recorre por reflexión la clase estática KadicErp.Core.Abstractions.Authorization.Permissions y convierte cada submódulo y constante en un PermissionSeedEntry.
Convención: - Clase anidada de nivel 1 marcada con KadicErp.Core.Abstractions.Authorization.PermissionModuleAttribute = módulo. - Clase anidada de nivel 2 (p. ej.
Permissions.RentACar.RentalTypes) = submódulo. - Miembrospublic const stringdentro de un submódulo = códigos de permiso.El
ModuleKeylo declara el propio módulo vía atributo, junto a sus permisos. Antes vivía en un diccionario compilado aquí mismo (KadicAuth.Application.Permissions.Seeding.PermissionReflectionScanner.ModuleKeyMap) y una clase ausente de ese diccionario se saltaba en silencio. Ese silencio tenía dos consecuencias encadenadas: sus permisos nunca llegaban a la base de datos, y además el diff los contaba como huérfanos por no encontrarlos en la salida del escáner. Usa ScanUnmapped() para obtener justo lo que antes se perdía.
- UnmappedModuleClass
Una clase de permisos cuyos códigos no se están sembrando, y el motivo. Lo que antes era un
continuesilencioso en el escáner.
Enums
- UnmappedModuleReason
Por qué los códigos de una clase de permisos no llegan a la base de datos.