permission-management-dntic
v1.1.0
Published
Esta librería permite la gestión de permisos en las aplicaciones DNTIC
Readme
permission-management-dntic
Esta librería permite la gestión de permisos en las aplicaciones DNTIC.
⚠️ ADVERTENCIA DE DEPRECACIÓN: Los siguientes componentes serán deprecados a partir de la versión 1.0.13 y dejará de recibir actualizaciones:
- PermissionManagementDnticService
- HasPermissionDirective
- HasPermissionGuard
- PERMISSION_CONFIG
Se recomienda migrar a la versión 2.0.0 descrita al final de este documento.
INSTALACIÓN
npm i permission-management-dnticCONFIGURACIÓN VERSIÓN 1.X.X
CONFIG INJECTION TOKEN
Configure el token de inyección de la librería, en el archivo app.config.ts en el apartado "providers".
{ provide: PERMISSION_CONFIG, useValue: {module: -1, apps: []}}ACTUALIZACIÓN DEL PROVIDER
Una vez obtenido los permisos de la aplicación Siipne 3W, realice la actualización del injection token agregando dos parametros: Usuario & permisos.
- Inyectar servicio
permissionService = inject(PermissionManagementDnticService);- Invoque a la función config para agregar usuario y permisos:
this.permissionService.setConfig(<USER>, <PERMISSION>)- Reemplace
<USER>por:
{
"grado": "SBTE",
"gradoDescripcion": "SUBTENIENTE",
"nombres": "MERA SANCHEZ SEGUNDO VICENTE",
"siglasUsuario": "MSSV",
"documento": "1234567890",
"username": "mssv1234567890"
}- Reemplace
<PERMISSION>por:
{
"module": 44,
"apps": [
{
"app": 4445,
"resources": [
{"resource": "SBSE-SW-GNR-CREAR"},
{"resource": "SBSE-SW-GNR-ACCESO"}
]
},
{
"app": 4446,
"resources": [
{"resource": "SBSE-CI-DNP-CIAS-DCC"},
{"resource": "SBSE-CI-GNR-ACCESO"}
]
}
]
} USO
PROTECCIÓN DE RUTAS
En el archivo Routes.py agregar el acceso a los permisos permissions corresponde al array de permisos asignados en la app appID corresponde al número de la aplicación en el SIIPNE module ID corresponde al número de módulo SIIPNE
canActivate:[HasPermissionGuard],
data: {
permissions: ['SBSE-EVT-C'],
appID: 1234,
moduleID: 1234
},PROTECCIÓN DE CONTENIDO
Para mostrar el contenido html de acuerdo a los permisos asignados agregar
<ng-template [libHasPermission]="{permissions: ['DINARP'], appID: 2366, moduleID: 1234}">
<p>Muestra si tiene los permisos</p>
</ng-template>CIERRE DE SESION
Este comando debe ejecutarse al cierre de sesión
permissionService = inject(PermissionManagementDnticService);
this.permissionService.removeConfig();
CONFIGURACIÓN VERSIÓN 2.0.0
La versión 2.x.x mantiene compatibilidad con aplicaciones existentes que usan identificadores numéricos y además permite usar identificadores tipo string para nuevas integraciones.
Los siguientes campos aceptan number | string:
moduleappmoduloIDappID
Adicionalmente, la librería soporta el nuevo modelo de respuesta con:
moduleCodeappCode
Cuando appID o moduloID llegan como string, la validación intentará resolver primero contra appCode y moduleCode. Si esos campos no existen, mantendrá compatibilidad con estructuras anteriores que usaban strings directamente en app y module.
INICIALIZAR LIBRERÍA
Una vez realizado el proceso de autenticación y autorización, usted recibirá datos similares a los propuestos en <USUARIO> y <PERMISOS> sobre el módulo y la aplicación, en la siguiente línea deberá configurar su librería.
- Importe el servicio
import { PermisoService } from 'permission-management-dntic';- Inyectar servicio
permisoService = inject(PermisoService);- Invoque a la función configurar para agregar usuario y permisos obtenidos:
this.permisoService.configurar(<USUARIO>, <PERMISOS>);- Reemplace en la función configurar
<USUARIO>por:
// Ejemplo de datos que recibirá para <USUARIO>
{
"grado": "SBTE",
"gradoDescripcion": "SUBTENIENTE",
"nombres": "MERA SANCHEZ SEGUNDO VICENTE",
"siglasUsuario": "MSSV",
"documento": "1234567890",
"username": "mssv1234567890"
}- Reemplace en la función configurar
<PERMISOS>por:
// Puede enviar un módulo individual
{
"module": 44,
"apps": [
{
"app": 4445,
"resources": [
{"resource": "SBSE-SW-GNR-CREAR"},
{"resource": "SBSE-SW-GNR-ACCESO"}
]
}
]
}También puede enviar un arreglo de módulos, por ejemplo cuando el backend responde en permissions:
[
{
"module": 15,
"moduleCode": "SIGESPRO",
"apps": [
{
"app": 31,
"appCode": "CONFMATRIZ",
"resources": [
{"resource": "SIGESPRO-CONFMATRIZ-READ"},
{"resource": "SIGESPRO-CONFMATRIZ-WRITE"}
]
},
{
"app": 33,
"appCode": "NORLEGAL",
"resources": [
{"resource": "SIGESPRO-NORLEGAL-READ"},
{"resource": "SIGESPRO-NORLEGAL-ACCESS"}
]
}
],
"perfil": "SUBADMINISTRADOR"
}
]Ejemplo:
this.permisoService.configurar(usuario, permissions);También puede configurar la librería con identificadores tipo string:
// Compatibilidad con estructuras anteriores
{
"module": "SIIPNE-SAC",
"apps": [
{
"app": "SAC-DETENIDOS",
"resources": [
{"resource": "SBSE-SW-GNR-CREAR"},
{"resource": "SBSE-SW-GNR-ACCESO"}
]
}
]
}En el nuevo modelo, puede validar por código así:
this.permisoService.tienePermisos(['SIGESPRO-NORLEGAL-ACCESS'], 'NORLEGAL', 'SIGESPRO');
this.permisoService.getPerfil('SIGESPRO');PROTECCIÓN DE CONTENIDO
La librería ofrece dos directivas para controlar la visibilidad de elementos basada en permisos:
1. Directiva tienePermiso (Estructural)
Esta directiva permite controlar la visualización de elementos HTML basada en los permisos del usuario en una aplicación y módulo específicos.
Sintaxis:
<ng-template [tienePermiso]="{permisos: ['SBSE-SW-GNR-CREAR'], appID: 4445, moduloID: 44}">
<!-- Este contenido solo será visible si el usuario tiene los permisos necesarios -->
<p>Contenido visible solo con permisos</p>
</ng-template>Agregue en los imports del componente la directiva TienePermisoDirective
import { TienePermisoDirective} from 'permission-management-dntic';
@Component({
...
imports: [TienePermisoDirective]
...
})Parámetros:
permisos: Array de strings con los identificadores de los permisos requeridosappID: ID numérico o string de la aplicación SIIPNEmoduloID: ID numérico o string del módulo SIIPNE
Ejemplo de uso:
<ng-template [tienePermiso]="{permisos: ['SBSE-SW-GNR-CREAR', 'SBSE-SW-GNR-ACCESO'], appID: 4445, moduloID: 44}">
<button class="btn btn-primary">Crear Registro</button>
</ng-template>Ejemplo con IDs tipo string:
<ng-template [tienePermiso]="{permisos: ['SIGESPRO-NORLEGAL-ACCESS'], appID: 'NORLEGAL', moduloID: 'SIGESPRO'}">
<button class="btn btn-primary">Crear Registro</button>
</ng-template>2. Guard tienePermiso (Protección de Rutas)
Este Guard permite proteger el acceso a rutas en el archivo routes de Angular.
Ejemplo de uso:
Importe en el archivo de rutas el guard.
import { TienePermisoGuard } from "permission-management-dntic";En la ruta específica que se desea proteger.
//Ejemplo de uso
const routes: Routes = [
{
path: 'admin',
component: AdminComponent,
canActivate: [TienePermisoGuard],
data: {
permisos: ['SBSE-SW-GNR-CREAR'],
appID: 4445,
moduloID: 44
}
}
];También puede usar valores string en la configuración de la ruta:
const routes: Routes = [
{
path: 'normativa-legal',
component: NormativaLegalComponent,
canActivate: [TienePermisoGuard],
data: {
permisos: ['SIGESPRO-NORLEGAL-ACCESS'],
appID: 'NORLEGAL',
moduloID: 'SIGESPRO'
}
}
];Parámetros:
permisos: Array de strings con los identificadores de los permisos requeridosappID: ID numérico o string de la aplicación SIIPNEmoduloID: ID numérico o string del módulo SIIPNE
MÉTODOS DEL SERVICIO
tienePermisos(permisos, appID, moduloID)
Permite validar permisos usando identificadores numéricos o string.
this.permisoService.tienePermisos(['SBSE-SW-GNR-CREAR'], 4445, 44);
this.permisoService.tienePermisos(['SIGESPRO-NORLEGAL-ACCESS'], 'NORLEGAL', 'SIGESPRO');getPerfil(moduloID)
Obtiene el perfil del módulo usando un identificador numérico o string.
this.permisoService.getPerfil(44);
this.permisoService.getPerfil('SIGESPRO');CIERRE DE SESIÓN
Este comando debe ejecutarse al cierre de sesión
permisoService = inject(PermisoService);
this.permisoService.eliminarConfiguracion();COMPATIBILIDAD
Esta librería está diseñada para ser utilizada en aplicaciones Angular versión 19.2.0 o superior, incluyendo Angular 20.x.
NOTA: Algunas aplicaciones Angular requieren la siguiente anotación en el archivo angular.json en el apartado build options
"preserveSymlinks": trueDerechos y Créditos
Derechos Reservados
© 2025 Policía Nacional del Ecuador. Todos los derechos reservados.
Esta librería es propiedad intelectual de la Dirección Nacional de Tecnologías de la Información y Comunicaciones (DNTIC) de la Policía Nacional del Ecuador. Su uso está autorizado exclusivamente para aplicaciones y sistemas desarrollados para o por la Policía Nacional del Ecuador.
Autores
- Sbte. Diana Morocho - Esp. en Ingeniería y Arquitectura de Software
- Equipo de Desarrollo DNTIC - Policía Nacional del Ecuador
Licencia
Uso interno. No se permite la redistribución, modificación o uso no autorizado sin el consentimiento explícito de la Dirección Nacional de Tecnologías de la Información y Comunicaciones (DNTIC) de la Policía Nacional del Ecuador.
