Class PermissionReflectionScanner
- Namespace
- KadicAuth.Application.Permissions.Seeding
- Assembly
- KadicAuth.Application.dll
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.
- Miembros public const string dentro de un submódulo = códigos de permiso.
El ModuleKey lo 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.
public static class PermissionReflectionScanner
- Inheritance
-
objectPermissionReflectionScanner
Methods
ScanAll()
Produce la lista completa de permisos declarados en KadicErp.Core.Abstractions.Authorization.Permissions, agrupados por la clave del módulo que los declara.
public static List<PermissionSeedEntry> ScanAll()
Returns
- List<PermissionSeedEntry>
ScanUnmapped()
Devuelve las clases de permisos cuyos códigos no llegan a la base de datos,
con el motivo por el que se pierden. Lo que antes era un continue silencioso.
public static List<UnmappedModuleClass> ScanUnmapped()
Returns
- List<UnmappedModuleClass>
Remarks
Existen dos formas de perder permisos, y conviene distinguirlas porque se arreglan de manera distinta:
- MissingAttribute — la clase no se declaró como módulo. Se arregla poniéndole KadicErp.Core.Abstractions.Authorization.PermissionModuleAttribute.
- ConstantsAtModuleLevel — la clase sí es un módulo, pero declara constantes directamente en el nivel 1, sin clase de submódulo que las contenga. El escáner busca submódulos en el nivel 2, así que esas constantes no las recoge nadie. Se arregla agrupándolas en un submódulo.