es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Esquema de base de datos de TypeORM para la gestión de usuarios.

Comienzo diciendo que soy un principiante en TypeORM, pero estoy desarrollando una aplicación web (NestJs) solo para estudiar más a fondo este ORM.
No puedo “pensar” en una solución válida (a nivel de esquema) que me permita administrar usuarios y los datos asociados a ellos en este caso:

Tengo tres tipos de usuarios: “agente”, “gerente de usuario” y “supervisor”. El agente debe poder ver solo sus datos, el “gerente de usuario” debe poder ver sus datos y los datos de los usuarios bajo su cargo. En cascada, el usuario supervisor debe poder ver sus datos, los del gerente y los de los usuarios bajo su cargo.

-Ejemplo práctico: un usuario “X” ha sido asignado tareas, si el usuario “X” tiene un gerente “R”, el gerente debe ver sus tareas y las tareas de “X”. En cascada, si el gerente tiene un supervisor, el supervisor debe poder ver sus tareas, las de “R” y las de “X”. Todas estas “asociaciones” deberían tener una fecha de inicio y una fecha de finalización. He visto que existe el patrón de tabla de clausura, pero con esto no puedo manejar los campos dateStart y dateEnd.

¿Algún consejo o ejemplo?
Muchas gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en diseño de bases de datos y en TypeORM, tu situación requiere de una versión modificada del modelo de jerarquía/jerarquía anidada, que es una forma de representar datos jerárquicos en una base de datos relacional.

    En esta versión modificada, podrías tener una tabla para usuarios que contenga datos específicos del usuario como nombre, correo electrónico, contraseña y otros detalles. La tabla de usuarios también tendría una llave foránea a otra tabla, digamos jerarquía, la cual tendría tres columnas: id, superior_id y subordinate_id.

    El superior_id y subordinate_id harían referencia al id de un usuario, siendo el id la llave primaria, y con columnas adicionales dateStart y dateEnd para capturar el periodo de tiempo en que la relación jerárquica fue válida.

    Con este diseño, puedes controlar el acceso de los usuarios a los datos utilizando el middleware o guardia global de NestJs. El middleware podría revisar el rol de un usuario y mostrar solo los datos asociados a él. Del mismo modo, los guardias globales podrían evitar el acceso no autorizado a los datos basados en las relaciones, las cuales se pueden acceder a través de TypeORM.

    Este diseño es mantenible y escalable, ya que solo utiliza dos tablas que pueden almacenar una gran cantidad de datos, y puedes agregar fácilmente más columnas a la tabla de jerarquía a medida que tu aplicación crece.

Comments are closed.