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.

Amplify tiene múltiples funciones de autenticación.

Estoy trabajando con amplify en un proyecto y tengo dificultades para obtener una cosa de la manera que quiero. No estoy seguro si es actualmente un problema de que no entiendo la herramienta, o si falta algo.
Me gustaría tener 2 tablas, con una relación de tieneMuchos, A tieneMuchos B. Me gustaría agregar una seguridad encima de eso para que solo el propietario de la fila en la tabla A pueda acceder a las filas en la tabla B que pertenecen a su fila en A. ¿Es esto posible? Probé algunas combinaciones con tieneMuchos y autenticación pero no llegué a ninguna parte.

Además, esperaba que si creo una fila en la tabla B con referencia a una fila en la tabla A, la vería al realizar una lista de A, sin embargo, está vacía.

Agradezco la ayuda.

Tags:  

Answer

  1. Avatar for davy.ai

    Estimado/a usuario/a,

    Gracias por su mensaje. Nos alegra saber que está utilizando AWS Amplify para su proyecto. Permítame intentar ayudarlo/a con sus preocupaciones sobre las tablas de relación hasMany y la seguridad:

    En primer lugar, definitivamente es posible añadir una capa de seguridad por encima de la relación hasMany de su proyecto entre dos tablas, asegurando que el propietario de la fila en la tabla A solo pueda acceder a las filas en la tabla B que pertenezcan a su fila en A. Para lograr esto, puede utilizar las capacidades incorporadas de autenticación y autorización de AWS Amplify.

    Una forma de implementar esto es utilizando la directiva @auth en los campos de su esquema que desea asegurar. Esta directiva se puede usar para especificar quién tiene acceso a estos campos basado en el estado de autenticación del usuario y en su rol de autorización. Por ejemplo, puede agregar la siguiente directiva @auth en los campos de la tabla B:

    type B @model @auth(rules: [{ allow: owner, ownerField: "belongsTo" }]) {
      id: ID!
      name: String
      belongsTo: ID!
      a: A @connection(name: "AB")
    }
    

    Aquí, la regla allow está establecida en owner, lo que significa que solo el propietario de la fila en la tabla A que corresponde al campo belongsTo de la tabla B tiene acceso a esta fila. El parámetro ownerField está establecido en “belongsTo”, que es el nombre del campo en la tabla B que se refiere al ID de la fila en la tabla A.

    Para implementar la relación hasMany entre las tablas A y B, puede utilizar la directiva @connection. Aquí tiene un ejemplo del esquema para ambas tablas:

    type A @model {
      id: ID!
      name: String
      bs: [B] @connection(name: "AB")
    }
    
    type B @model {
      id: ID!
      name: String
      belongsTo: ID!
      a: A @connection(name: "AB")
    }
    

    La directiva @connection se utiliza para indicar la relación entre las tablas A y B. El parámetro name está establecido en “AB” para ambas directivas @connection, lo que indica que hay una relación entre estas dos tablas.

    En cuanto a su preocupación sobre no ver la fila en la tabla B al realizar una listaA, es difícil determinarlo sin ver su código. Sin embargo, una posible razón podría ser que no ha incluido el campo bs en su consulta. Aquí tiene un ejemplo de cómo incluir el campo bs en una consulta para todas las filas en la tabla A:

    const allAs = await API.graphql({
      query: `
        query {
          listAs {
            items {
              id
              name
              bs {
                items {
                  id
                  name
                }
              }
            }
          }
        }
      `
    });
    

    Espero que esto le ayude con su proyecto. Déjeme saber si tiene alguna pregunta o inquietud adicional.

Comments are closed.