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.

Diseñando una base de datos de SAAS multiinquilino con Postgres RLS

Quiero diseñar una base de datos SAAS multiinquilino con PostgreSQL y RLS. Quiero poder alojar a todos los usuarios y los inquilinos en la misma base de datos y aislar sus datos con RLS.

En mi caso de uso tiene sentido que los inquilinos compartan ciertos datos de usuario para evitar la duplicación de esos datos. Los inquilinos solicitarán un permiso a los usuarios y estos permisos se almacenarán en una tabla de permisos y se utilizarán para controlar el RLS.

Sin embargo, necesito que los inquilinos tengan datos de usuario únicos para su organización, como la fecha de incorporación u otros datos. Lo que necesito saber es cómo puedo diseñar la base de datos para contener todos los datos específicos de la organización. He pensado en utilizar JSONB para almacenar estos datos de la siguiente manera:

datos_de_usuario_para_inquilino

id
id_de_usuario
id_de_inquilino
datos JSONB

estos datos son decididos por el inquilino desde el frontend.

¿Está bien esto? ¿Cómo puedo diseñar mejor la base de datos para adaptarla a este caso de uso?

Utilizaré Supabase para la base de datos, la autenticación, el almacenamiento y otros usos, por lo que el RLS puede controlar el acceso.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en PostgreSQL, multitenant, Supabase y Row-Level-Security, puedo sugerir el siguiente diseño de base de datos para lograr el resultado deseado.

    Para almacenar los datos específicos de cada organización, puede ser mejor enfoque crear una tabla separada para cada inquilino. Por ejemplo, puede tener una tabla llamada tenant_data con la siguiente estructura:

    tenant_data
    
    id
    tenant_id
    join_date
    any_other_field
    

    Aquí, id es la clave primaria, tenant_id identifica al inquilino y join_date y any_other_field son datos únicos específicos del inquilino. Puede agregar o eliminar campos en la tabla tenant_data según los requisitos del inquilino.

    Para vincular la tabla tenant_data con la tabla user, puede crear una tabla de enlace llamada user_tenant_data con la siguiente estructura:

    user_tenant_data
    
    id
    user_id
    tenant_data_id
    

    Aquí, id es la clave primaria, user_id es la clave externa que referencia la tabla user, y tenant_data_id es la clave externa que referencia la tabla tenant_data. Puede almacenar datos específicos del user correspondientes a un inquilino aquí.

    En cuanto al enfoque JSONB, puede funcionar pero puede contener datos redundantes y complicar las consultas. Además, puede plantear preocupaciones en cuanto a la normalización de datos.

    Usando Supabase para BD, Autenticación y Almacenamiento, puede controlar el acceso a los datos utilizando Row-Level Security. Sin embargo, diseñar una base de datos multitenant con PostgreSQL y RLS requiere una planificación cuidadosa para garantizar una gestión eficiente de datos y preocupaciones de seguridad.

Comments are closed.