npm package: @pdigitalessiclicksuscribe/security-service
Description: Servicio para la validación de accesos de tuclick.
Author: dchavezbautista
Latest version: 2.0.0

# Módulo de Seguridad
Este módulo está encargado de solicitar los accesos de un usuario y validar si tiene los permisos necesarios para acceder a los distintos modulos solicitados mediante su token de acceso generado desde el servicio de login de **tuclick**.

## Instalación
Para poder hacer uso del módulo en el api que se desea implementar, es necesario agregarlo al proyecto con los siguientes comandos:

``` bash
// usando NPM
$ npm install @pdigitalessiclicksuscribe/security-service

// usando YARN
$ yarn add @pdigitalessiclicksuscribe/security-service
```

### Notas
Para usar la última versión del módulo (en caso de actualizaciones) es necesario dirigirse a la raíz del proyecto y encontrar el archivo `package.json`, ahí se encuentran las dependencias usadas en el api. Localizamos el módulo de seguridad:

``` json
"@pdigitalessiclicksuscribe/security-service": "0.0.7",
```

Y procedemos a cambiar la versión por la mas reciente marcada. Por último actualizamos con el comando:

``` bash
// usando NPM
$ npm install

// usando YARN
$ yarn install
```

## Conectividad
El módulo de seguridad realiza conexiones directamente con la base de datos de **tuclick**, esto es para solicitar en tiempo real los accesos con los que cuentan los usuarios para acceder a alguna función de un micro-servicio.

Es necesario que antes de hacer uso del servicio, se le proporcione los accesos a la base de datos de `SiclikUsers` como se muestra a continuación:

``` json
{
  "connectionLimit": "xx",
  "host": "xx.xx.xx.xx",
  "user": "xxxxx",
  "password": "xxxXXxxXX",
  "database": "xxxXXxXxx",
  "dateStrings": "date",
  "debug": false,
  "showQueries": false,
}
```

## Modo de uso

Para comenzar a usar el módulo de seguridad es necesario considerar los datos principales que se necesitan proporcionar:

| Parámetro | Cardinalidad | Tipo de dato |
|:---------:|:------------:|:------------:|
|   accessToken   | Obligatorio  |    String   |
| requiredAccess  | Obligatorio  |    Array    |
| options  | Opcional |    Object    |
| options.oneAccess  | Opcional  |    Boolean    |

### Importar módulo con acceso a base de datos
A continuación se mostrara un ejemplo de como se debe de importar el servicio de seguridad pasando como parámetros los accesos a la base de datos de usuarios.

``` javascript
const securityService = require('@pdigitalessiclicksuscribe/security-service');
const bdconfig = require('./config/bdconfig');

const security = securityService(bdconfig);
```

### Validar accesos de usuario
Para validar si un usuario tiene accesos a los modulos que nosotros fijamos como validos, debe de hacer de la siguiente manera:

``` javascript
const accessType = security.getAccess;

const requiredAccess = [
  { accessType: accessType.cotizarEscritura },
  { accessType: accessType.cotizarLectura }
];

async function seguridad() {
  const hasAccess = await security.validateSecurity(token, requiredAccess);
  return hasAccess;
}
```
La respuesta que nos da el módulo es un booleano en forma de promesa que nos indica si se tiene los permisos necesarios o no.