Tomemos un dominio abstracto donde el usuario puede crear grupos, invitar a otros usuarios y asignar permisos dentro de estos grupos.
Esquemáticamente se ve así
[ { "groupId": 1, "name": "Group 1", "users": [ { "id": 1, "name": "User 1", "permissions": ["A", "B", "C"] }, // same { "id": 2, "name": "User 2", "permissions": ["A", "B"] } { "id": 3, "name": "User 3", "permissions": ["C"] } ] }, { "groupId": 2, "name": "Group 2", "users": [ { "id": 4, "name": "User 4", "permissions": ["A", "B", "C"] }, { "id": 5, "name": "User 5", "permissions": ["A", "B"] } { "id": 1, "name": "User 1", "permissions": ["C"] } // same ] } ]Hay 5 usuarios en la aplicación (del 1 al 5). Cada uno de los usuarios tiene permisos dentro de su grupo (A, B, C).
La pregunta es: ¿Dónde almacenar este permiso en el cliente web?
Uso React.js + Node.js y administro mi autenticación a través de JWT. ¿Está bien tener un objeto en el JWT del usuario que almacene permisos por grupo? Algo como esto
Falso-JWT
{ "userId": 1, "groups": [ { "groupId": 1, "permissions": ["A", "B", "C"] }, { "groupId": 2, "permissions": ["C"] } ] }También espero actualizar los permisos de usuario sobre la marcha sin cerrar la sesión del usuario
¿Alguna sugerencia de cómo hacerlo correctamente?
Si sus reglas de autorización (roles) se están volviendo demasiado complicadas, entonces puede ser conveniente considerar usar el enfoque de autorización basado en notificaciones en su lugar.
Creo que esta pregunta SO es un buen punto de partida: