# epm-client

> Libreria cliente para consumir los servicios de autorización

Latest version **1.1.0** (published 2021-04-30) · 0 weekly downloads

## Install

```sh
npm install epm-client
pnpm add epm-client
yarn add epm-client
bun add epm-client
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; esm support; no vulnerabilities.

Warnings: low downloads.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.1.0 |
| Published | 2021-04-30 |
| First published | 2020-07-06 |
| Weekly downloads | 0 |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 3 |
| Unpacked size | 211.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Intergrupo |
| Maintainers | jgomezm |

## Links

- npm: https://www.npmjs.com/package/epm-client
- npm.io page: https://npm.io/package/epm-client

## Dependencies (3)

- [tslib](https://npm.io/package/tslib.md) ^2.0.0
- [crypto-js](https://npm.io/package/crypto-js.md) ^4.0.0
- [secure-web-storage](https://npm.io/package/secure-web-storage.md) ^1.0.2

## Recent versions

- 1.1.0 (latest) — 2021-04-30
- 1.0.3 — 2021-03-11
- 1.0.2 — 2021-03-11
- 1.0.1 — 2021-02-03
- 1.0.0 — 2021-02-02
- 0.2.16 — 2021-02-01
- 0.2.15 — 2021-02-01
- 0.2.14 — 2020-11-19
- 0.2.13 — 2020-11-19
- 0.2.12 — 2020-11-19
- 0.2.11 — 2020-11-19
- 0.2.10 — 2020-11-19
- 0.2.9 — 2020-11-19
- 0.2.8 — 2020-11-18
- 0.2.7 — 2020-11-18
- … 40 more at https://npm.io/package/epm-client/versions

## README

# EpmClient

Esta librería es un cliente para angular, donde se gestiona el llamado a los servicios del componente de autorización para EPM, así como el manejo de la información del árbol de menú en el localStorage y la validación de rutas por medio de guardianes.
### Instalación
Use npm:
> $ npm install epm-client

## Configuración

```js
import { EpmConfiguracionService } from 'epm-client';
 ```

Para configurar los servicios del cliente, se requiere llamar el método  configuración el cual se encuentra en “EpmConfiguracionService”. Este requiere la especificación del ambiente, una bandera para traza de log y la key de suscripción a API Management.
* Ejemplo
```ts
this.epmConfiguracionService.configuracion(environment.production, !environment.production, environment.subscriptionKey);
 ```
 
## Uso ##

- ### [Menu](#Servicios-Menú)
- ### [Entidades](#Servicios-Entidades)
- ### [Botones](#Servicios-Botones)
- ### [Manifiesto](#Servicios-Manifiestos)
- ### [Permisos](#Servicios-Permisos )
- ### [Roles](#Servicios-Roles )
- ### [Generales](#Servicios-Generales) 

## Servicios Menú ## 

### Obtener Menú Storage
``` ts
// *****************************
// Verifica si se encuentra información del menú almacenada en el storage.
// *****************************
this.epmClientService.getStorageMenu()
```
### Eliminar Menú Storage
``` ts
// *****************************
// Elimina la información del menú almacenada en el storage. 
// *****************************
this.epmClientService.deleteStorageMenu();
```
### Almacenar Menú Storage
``` ts
// *****************************
// Almacena la información obtenida por el servicio en el storage.
// *****************************
this.epmClientService.saveStorageMenu(<Recurso[]>);
```
### Obtener Menú
``` ts
// *****************************
// Servicio que obtiene la información del menú correspondiente al ClientId suministrado como parámetro, esto determina la visibilidad de acceso a las entidades. 
// *****************************
this.epmClientService.getMenu(<"ClientId">)
```
#### Consideraciones
Es responsabilidad de cada aplicación eliminar la información almacenada en el storage, cuando se realice el proceso de deslogueo y cuando la aplicación necesite cambiar los privilegios del menú.

### Ejemplo

```ts
// *****************************
// OBTENER Y ALMACENAR ARBOL DE MENU
// *****************************
import  {EpmClientService,Recurso }  from  'epm-client';

export  class  SidebarComponent  implements  OnInit {
arbolMenu:  Recurso[];
constructor(private  epmClientService:  EpmClientService) { }

ngOnInit():  void {

	const menu =  this.epmClientService.getStorageMenu();
	if (!menu) {
	this.epmClientService.getMenu(<"ClientId">)
		.subscribe(res  => {
		this.arbolMenu  = res;
		this.epmClientService.deleteStorageMenu();
		this.epmClientService.saveStorageMenu(this.arbolMenu);
	},
	error  => {
	console.log('error: ', error);
	});

} else {
	this.arbolMenu= menu;
}

```
### Respuesta 
``` json
{}
```
### Guardianes
Servicio que provee la verificación de las rutas a la cuales se tiene acceso dentro de la aplicación.
``` ts
// *****************************
// Verifica si la url pasada como parámetro tiene permisos de visualización o no por el usuario.
// *****************************
this.epmClientService.validarRuta(<"url">); Result => true or false
```
### Ejemplo
```ts
// *****************************
// VALIDANDO RUTAS CON GUARDIANES
// *****************************

import { EpmClientService } from  'epm-client';
permitir =  false;
constructor(private  epmClientService:  EpmClientService,
					private  router:  Router) {
}
canActivate(route:  ActivatedRouteSnapshot, state:  RouterStateSnapshot) {
	this.permitir  =  this.epmClientService.validarRuta(route['_routerState'].url);
	if (!this.permitir) {
		this.router.navigate(['/no-autorizado']);
	}
	return  this.permitir;
}

```
### Respuesta 
``` ts
true or false
 ```
 
 ## Servicios Entidades ##

### Obtener Entidad
``` ts
// *****************************
// Obtiene la información de las entidades, con el fin de que se pueda verificar acciones permitidas en la misma.

// *****************************
this.epmClientService.getEntidad(<"ClientId">)
```
### Obtener Entidad storage 
``` ts
// *****************************
// Obtiene una Lista de las Entidades almacenadas en el storage.
// *****************************
 this.epmClientService.getStorageEntidad();
```

### Eliminar Entidad storage 
``` ts
// *****************************
// Elimina la información almacenada de la entidad en el storage.
// *****************************
 this.epmClientService.deleteStorageEntidad();
```
### Almacenar Entidad storage 
``` ts
// *****************************
// Almacena la información de la entidad proporcionada por el servicio en el storage.
// *****************************
this.epmClientService.saveStorageEntidad(<Recurso[]>);
```
### Ejemplo
``` ts
import  {EpmClientService }  from  'epm-client';

export  class  SidebarComponent  implements  OnInit {
constructor(private  epmClientService:  EpmClientService) { }

ngOnInit():  void {
 const result = this.epmClientService.getStorageEntidad();
    if(!result) {
      this.epmClientService.getEntidad(<"ClientId">).subscribe(res=>{
        this.epmClientService.deleteStorageEntidad();
        this.epmClientService.saveStorageEntidad(res);
    })
  }
```

### Respuesta
``` ts
{}
```
### Validar Entidad  
``` ts
// *****************************
// Verifica los permisos registrados sobre una entidad pasada como parametro el nombre.
// *****************************
this.epmClientService.validarEntidad(<"entidad">); Result => string[]
```

### Ejemplo
``` ts
import  {EpmClientService }  from  'epm-client';

export  class  SidebarComponent  implements  OnInit {
constructor(private  epmClientService:  EpmClientService) { }

ngOnInit():  void {
 const result = this.epmClientService.validarEntidad(<"boton">); Result => string[]
}
```
### Respuesta
``` ts
{}
```

#### Consideraciones
Es recomendable validar preexistencia del listado de entidades, para evitar llamados innecesarios al servicio y dependiendo de las acciones o permisos que se estén brindando sobre la entidad, eliminarla y sobreescribirla en el storage, esto con la finalidad de tener un listado actualizado con los cambios.

## Servicios Botones ##

### Validar Boton  
``` ts
// *****************************
// Verifica los permisos del boton, con su nombre ingresado como parametro. 
// *****************************
this.epmClientService.validarBoton(<"boton">) Result => true or false
```

### Obtener Botones storage  
``` ts
// *****************************
// Obtiene un listado de los botones (recursos) almacenado en el storage.
// *****************************
this.epmClientService.getStorageBotones(); Result => Recursos[]
```

### Eliminar Botones storage  
``` ts
// *****************************
// Elimina el listado de botones (recursos) almacenados en el storage.
// *****************************
this.epmClientService.deleteStorageBotones()
```

### Almacenar Botones storage  
``` ts
// *****************************
// Almacena el listado de botones (recursos) en el storage.
// *****************************
this.epmClientService.saveStorageBotones(<Recurso[]>)
```

### Ejemplo
``` ts
import  {EpmClientService }  from  'epm-client';

export  class  SidebarComponent  implements  OnInit {
botones:  Recurso[];
constructor(private  epmClientService:  EpmClientService) { }

ngOnInit():  void {
 const result = this.epmClientService.getStorageBotones();
    if(result === null){
      this.epmClientService.getBotones(<"ClientId">).subscribe(res=>{
        this.epmClientService.deleteStorageBotones();
        this.epmClientService.saveStorageBotones(res);
      })
    }
    this.botones= result;
  }
```
### Respuesta
``` ts
{}
```
 ## Servicios Manifiestos ##


### Obtener Manifiesto  
``` ts
// *****************************
// Obtiene el Manifiesto con la información del usuario.
// *****************************
 this.epmClientService.getManifiesto(<"ClientId">);
```
### Ejemplo
``` ts
import  {EpmClientService }  from  'epm-client';

export  class  SidebarComponent  implements  OnInit {
constructor(private  epmClientService:  EpmClientService) { }

ngOnInit():  void {
 this.epmClientService.getManifiesto(<"ClientId">).subscribe(res=>{
    var result  = res;
    })
  }
 }
```

### Respuesta
``` ts
{}
```

 ## Servicios Permisos ##

### Obtener Listado Codigo Permisos  
``` ts
// *****************************
// Obtiene el listado de codigos de los permisos.
// *****************************
 this.epmClientService.getListCodigosPermisos(<"ClientId">);
```
### Ejemplo
``` ts
import  {EpmClientService }  from  'epm-client';

export  class  SidebarComponent  implements  OnInit {
constructor(private  epmClientService:  EpmClientService) { }

ngOnInit():  void {
  this.epmClientService.getListCodigosPermisos(<"ClientId">).subscribe(res=>{
      var result = res;
    })
 }
```
### Respuesta
``` ts
{}
```

### Obtener Permisos por Tipo
``` ts
// *****************************
// Obtiene un listado de permisos por el tipo.
// *****************************
 this.epmClientService.getPermisosPorTipo(<"ClientId">,<"tipoRecurso">); Result => Recurso[]
```
### Ejemplo
``` ts
import  {EpmClientService }  from  'epm-client';

export  class  SidebarComponent  implements  OnInit {
botones:  Recurso[];
constructor(private  epmClientService:  EpmClientService) { }

ngOnInit():  void {
  this.epmClientService.getPermisosPorTipo(<ClientId>,"menu").subscribe(res => {
      var result = res;
    })
 }
```
### Respuesta
``` ts
{}
```

### Obtener Permisos por Rol
``` ts
// *****************************
// Obtiene el listado de permisos por Rol.
// *****************************
 this.epmClientService.getPermisosPorRol(<"ClientId">,<"rol">,<"tipoRecurso">); Result => Recurso[]
```
### Ejemplo
``` ts
import  {EpmClientService }  from  'epm-client';

export  class  SidebarComponent  implements  OnInit {
botones:  Recurso[];
constructor(private  epmClientService:  EpmClientService) { }

ngOnInit():  void {
   this.epmClientService.getPermisosPorRol(<"ClientId">,<"rol">,<"tipoRecurso">).subscribe(res => {
      var result = res;
    })
 }
```
### Respuesta
``` ts
{}
```

### Validar Permisos por Codigo
``` ts
// *****************************
// Verifica los permisos actuales por su codigo.
// *****************************
 this.epmClientService.validarPermisoCodigo(<"ClientId">,<"Codigo">); Result => RespuestaAutorizacion
```
### Ejemplo
``` ts
import  {EpmClientService }  from  'epm-client';

export  class  SidebarComponent  implements  OnInit {
botones:  Recurso[];
constructor(private  epmClientService:  EpmClientService) { }

ngOnInit():  void {
   this.epmClientService.validarPermisoCodigo(<"ClientId">,<"Codigo">).subscribe(res => {
      var result = res;
    })
 }
```
### Respuesta
``` ts
{}
```

### Validar Permisos por Nombre
``` ts
// *****************************
// Verifica los permisos actuales por su Nombre.
// *****************************
this.epmClientService.validarPermisoNombre(<"ClientId">,<"tipoRecurso">,<"recurso">); Result => RespuestaAutorizacion
```
### Ejemplo
``` ts
import  {EpmClientService }  from  'epm-client';

export  class  SidebarComponent  implements  OnInit {
botones:  Recurso[];
constructor(private  epmClientService:  EpmClientService) { }

ngOnInit():  void {
   this.epmClientService.validarPermisoNombre(<"ClientId">,<"tipoRecurso">,<"recurso">).subscribe(res => {
      var result = res;
    })
 }
```
### Respuesta
``` ts
{}
```


 ## Servicios Roles ##

### Obtener Listado de Roles
``` ts
// *****************************
// Obtiene un listado de Roles.
// *****************************
 this.epmClientService.getListRoles(<"ClientId">); Result => Rol[]
```
### Ejemplo
``` ts
import  {EpmClientService }  from  'epm-client';

export  class  SidebarComponent  implements  OnInit {
botones:  Recurso[];
constructor(private  epmClientService:  EpmClientService) { }

ngOnInit():  void {
   this.epmClientService.getListRoles(<"ClientId">).subscribe(res => {
      var result = res;
    })
 }
```
### Respuesta
``` ts
{}
```

### Validar Rol
``` ts
// *****************************
// Valida los roles por codigo.
// *****************************
this.epmClientService.validarRol(<"ClientId">,<"Codigo">); Result => RespuestaAutorizacion
```
### Ejemplo
``` ts
import  {EpmClientService }  from  'epm-client';

export  class  SidebarComponent  implements  OnInit {
botones:  Recurso[];
constructor(private  epmClientService:  EpmClientService) { }

ngOnInit():  void {
   this.epmClientService.validarRol(<"ClientId">,<"Codigo">).subscribe(res => {
      var result = res;
    })
 }
```
### Respuesta
``` ts
{}
```

### Validar Permisos Url
``` ts
// *****************************
// Valida los permisos en una Url.
// *****************************
this.epmClientService.validarUrl(<"ClientId">,<"url">); Result => RespuestaAutorizacion
```
### Ejemplo
``` ts
import  {EpmClientService }  from  'epm-client';

export  class  SidebarComponent  implements  OnInit {
botones:  Recurso[];
constructor(private  epmClientService:  EpmClientService) { }

ngOnInit():  void {
   this.epmClientService.validarUrl(<"ClientId">,<"url">).subscribe(res => {
      var result = res;
    })
 }
```
### Respuesta
``` ts
{}
```

 ## Servicios Generales ##

### Realizar Peticiones POST
``` ts
// *****************************
// Permite Realizar peticiones POST a un recurso.
// *****************************
this.epmClientService.post(<"url">, body, <"recurso">, <"operacion">); Result => object
```
### Ejemplo
``` ts
import  {EpmClientService }  from  'epm-client';

export  class  SidebarComponent  implements  OnInit {
botones:  Recurso[];
constructor(private  epmClientService:  EpmClientService) { }

ngOnInit():  void {
   this.epmClientService.post(<"url">, body, <"recurso">, <"operacion">).subscribe(res => {
      var result = res;
    })
 }
```
### Respuesta
``` ts
{}
```

### Realizar Peticiones GET
``` ts
// *****************************
// Permite Realizar peticiones GET a un recurso.
// *****************************
this.epmClientService.get(<"url">, <"recurso">, <"operacion">); Result => object
```
### Ejemplo
``` ts
import  {EpmClientService }  from  'epm-client';

export  class  SidebarComponent  implements  OnInit {
botones:  Recurso[];
constructor(private  epmClientService:  EpmClientService) { }

ngOnInit():  void {
   this.epmClientService.get(<"url">, <"recurso">, <"operacion">).subscribe(res => {
      var result = res;
    })
 }
```
### Respuesta
``` ts
{}
```

## API's
Este paquete cuenta con las siguientes API's
```ts
// *****************************  
// ClientId: Identificador único de cada aplicación cuando se registra en el componente de autorización.  
// tipoRecurso: Codigo tipo de recurso a filtrar.
// recurso: Nombre o código del recurso a validar.
// url_recurso: Dirección URL del recurso.
// Codigo: Código del recurso a validar.
// Recurso[]: Listado de recursos.
// *****************************
getStorageMenu()
deleteStorageMenu()
saveStorageMenu(<Recurso[]>)
getMenu("<ClientId>")
validarRuta("url")
getEntidad("<ClientId>")
getStorageEntidad()
deleteStorageEntidad()
saveStorageEntidad(<Recurso[]>)
validarEntidad(<"entidad">)
validarEntidad(<"boton">)
validarBoton(<"boton">)
getStorageBotones()
deleteStorageBotones()
saveStorageBotones(<Recurso[]>)
getManifiesto("<ClientId>")
getListCodigosPermisos("<ClientId>")
getPermisosPorTipo("<ClientId>","tipoRecurso")
getPermisosPorRol("<ClientId>",<"rol">,<"TipoRecurso">)
validarPermisoCodigo("<ClientId>",<"codigo">)
validarPermisoNombre("<ClientId>",<"TipoRecurso">,<"recurso">)
getListRoles("<ClientId>")
validarRol("<ClientId>","codigoRol")
validarUrl("<ClientId>","url")
 ```

---
_Source: https://npm.io/package/epm-client · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
