npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

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-dntic

CONFIGURACIÓ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.

  1. Inyectar servicio
permissionService = inject(PermissionManagementDnticService);
  1. Invoque a la función config para agregar usuario y permisos:
this.permissionService.setConfig(<USER>, <PERMISSION>)
  1. Reemplace <USER> por:
{
  "grado": "SBTE",
  "gradoDescripcion": "SUBTENIENTE",
  "nombres": "MERA SANCHEZ SEGUNDO VICENTE",
  "siglasUsuario": "MSSV",
  "documento": "1234567890",
  "username": "mssv1234567890"
}
  1. 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:

  • module
  • app
  • moduloID
  • appID

Adicionalmente, la librería soporta el nuevo modelo de respuesta con:

  • moduleCode
  • appCode

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.

  1. Importe el servicio
import { PermisoService } from 'permission-management-dntic';
  1. Inyectar servicio
permisoService = inject(PermisoService);
  1. Invoque a la función configurar para agregar usuario y permisos obtenidos:
this.permisoService.configurar(<USUARIO>, <PERMISOS>);
  1. 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"
}
  1. 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 requeridos
  • appID: ID numérico o string de la aplicación SIIPNE
  • moduloID: 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 requeridos
  • appID: ID numérico o string de la aplicación SIIPNE
  • moduloID: 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": true

Derechos 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.