Antecedentes: estoy usando Amplify para crear un type Item @model elemento con un propietario de @auth allow owner que agrega el propietario como un CognitoID al elemento.
Pregunta: Este elemento es legible para invitados y me gustaría mostrar el propietario (u otros metadatos relacionados, como un nombre de usuario/correo electrónico) para este elemento.
por ejemplo Cognito.GetUserAttributes(2b10fb7e-4472-43c9-9bb9-54219b5027a3)
¿Es algo así posible? ¿Cómo se supone que debe diseñarse para este caso de uso? ¿Tengo que agregar una lambda que agregue los metadatos del usuario al elemento cuando se crea?
Me gustaría que esta solución fuera escalable.
El esquema:
type Item @model @auth(rules: [ { allow: owner}, { allow: groups, groups: ["Admin"] }, { allow: private, operations: [read] }, { allow: public, operations: [read] } ]) { id: ID! title: String! description: String }Desde DynamoDB:
{ "__typename": "Item", "_lastChangedAt": 1593707126605, "_version": 1, "createdAt": "2020-07-02T16:25:26.582Z", "description": "Description", "id": "0592fcd8-408e-406e-84bf-9f63eb43e147", "owner": "2b10fb7e-4472-43c9-9bb9-54219b5027a3", "title": "Item", "updatedAt": "2020-07-02T16:25:26.582Z" }Puede usar una función de resolución en un campo cognitoAttributes . La función lambda puede llamar a admin-get-user en Cognito y devolver los atributos. La función lambda recibirá el elemento dynamo en la propiedad event.source , por lo que tendrá acceso a la identificación del propietario para realizar la llamada a Cognito .
type Item @model @auth(rules: [ { allow: owner}, { allow: groups, groups: ["Admin"] }, { allow: private, operations: [read] }, { allow: public, operations: [read] } ]) { id: ID! title: String! cognitoAttributes: [String]! @function('cognitoGetUserAttributes-${env}) description: String }