} Roles BIN
Roles en sesión
Roles requeridos
Exactos
VS
# En sesión Requeridos Exactos Puede acceder Notas
La teoría:

Esta es una app de pruebas de acceso a usuarios con multiples roles, almacenando estos en binario

Aquí mostramos el caso para 4 roles (A, B, C, D) cada uno con su respectivo valor (8, 4, 2, 1), lo que nos supone un binario de 4 bits, pero se pueden utilizar la cantidad de roles que se desee.

Por ejemplo si un usuario solo tiene los roles A y C, suman 11, el binario correspondiente seria 1010.

Roles en sesión:
Se refiere a los roles que el usuario en sesión tiene de acuerdo a la BDD.
Roles requeridos:
Roles a los cuales se permite acceder:
Exactos:
Indicador lógico, si se deja en falso se podrá acceder si se cumple al menos uno de ellos, de lo contrario se deberán cumplir todos los especificados.
Ejemplos:
Roles A o C:
Requeridos: 1_1_ Exactos: NO
Roles A y D:
Requeridos: 1__1 Exactos: SI
NO Roles A:
Requeridos: 0___ Exactos: SI
NO Roles A y B:
Requeridos: 00__ Exactos: SI
NO Roles A, pero SI B:
Requeridos: 01__ Exactos: SI
NO Roles A, pero SI tiene B Puede acceder SI o SI:
Requeridos: 01__ Exactos: NO
Código JS:
const sessionRoles = '0101';
const requiredRoles = '___1';
const exact = false;

const A = requiredRoles.charAt(0) === '_' ? sessionRoles.charAt(0) : requiredRoles.charAt(0);
const B = requiredRoles.charAt(1) === '_' ? sessionRoles.charAt(1) : requiredRoles.charAt(1);
const C = requiredRoles.charAt(2) === '_' ? sessionRoles.charAt(2) : requiredRoles.charAt(2);
const D = requiredRoles.charAt(3) === '_' ? sessionRoles.charAt(3) : requiredRoles.charAt(3);

const rolesFix = `${A}${B}${C}${D}`;

const access = exact ? (rolesFix === sessionRoles) :
((sessionRoles.charAt(0) === requiredRoles.charAt(0)) ||
(sessionRoles.charAt(1) === requiredRoles.charAt(1)) ||
(sessionRoles.charAt(2) === requiredRoles.charAt(2)) ||
(sessionRoles.charAt(3) === requiredRoles.charAt(3)));