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.

Solo permitir lectura si el usuario tiene el ID de documento exacto, seguridad a nivel de fila de PostgreSQL / Supabase.

¿Existe alguna manera para que un usuario pueda leer un documento solo si tiene el ID del documento exacto?

Quiero evitar crear usuarios, por lo que la única seguridad es una guía aleatoria guardada en la memoria del navegador; las configuraciones se guardarán en la tabla “settings” con id=guid.

Entonces, cuando se abra la página se buscará con:

supabase.from(‘settings’).select(‘*’).eq(‘id’, guid)

¿Cómo puedo asegurar esa configuración (sin crear un usuario ficticio)?

Así como en Firebase:
https://stackoverflow.com/questions/66809886/firebase-firestore-only-allow-read-if-user-has-exact-document-id pero para postgresql/supabase.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible permitir que un usuario solo lea un documento si tiene exactamente el ID del documento a través de la seguridad a nivel de filas en Postgresql y Supabase.

    Una manera de hacer esto es crear una política de seguridad a nivel de fila en la tabla “settings” que solo permita a un usuario leer una fila si el valor de la columna “id” coincide con su GUID generado aleatoriamente.

    Aquí hay un ejemplo de declaración SQL para crear esta política:

    `CREAR POLÍTICA settings_id_policy EN LA CONFIGURACIÓN
    USANDO (id = current_setting ('app.user_guid') :: uuid)
    CON VERIFICACIÓN (id = current_setting ('app.user_guid') :: uuid);
    `

    La función current_setting ('app.user_guid') devuelve el valor de la configuración “app.user_guid” que se almacena en la sesión actual. El tipo :: uuid se utiliza para convertir el valor de cadena del GUID a un tipo UUID.

    Esta política solo permite a un usuario leer una fila si la columna “id” coincide con su GUID, que se recupera de la memoria del navegador.

    Tenga en cuenta que este método no requiere la creación de cuentas de usuario, pero asume que cada usuario tiene un GUID único almacenado en la memoria de su navegador.

    En general, al implementar políticas de seguridad a nivel de filas como esta, puede proporcionar controles de seguridad granulares en filas individuales en tablas en una base de datos de Postgresql a través de Supabase.

Comments are closed.