2017-08-14 2 views
0

J'essaie d'implémenter un système de partage de fichiers public pour mon application en utilisant AWS Cognito & DynamoDB. Fondamentalement, les utilisateurs peuvent créer et se connecter à un compte en utilisant Cognito et utiliser ce compte pour télécharger leurs fichiers. Les métadonnées publiques auxquelles il faut accéder fréquemment vont à DynamoDB (telles que les notes, le nombre de téléchargements, la date de téléchargement, etc.) et les fichiers eux-mêmes dans un compartiment S3. Pour garantir que seul l'utilisateur Cognito ayant partagé le fichier est autorisé à supprimer l'élément DynamoDB et à modifier certains attributs privés, j'utilise l'ID d'identité Cognito comme clé primaire pour mes éléments dans DynamoDB, associé à une stratégie. règle as described in the docs. Afaik il n'y a pas d'autre solution. Jusqu'ici tout va bien, mais cela signifie qu'un utilisateur ne peut pas télécharger plus d'un élément dans la base de données, car les attributs de clé primaire des éléments DynamoDB doivent être uniques, ce qui n'est pas possible puisque j'utilise l'identifiant Cognito pour eux.DynamoDB avec limitations Cognito

Je pourrais bien sûr créer un élément pour chaque utilisateur et stocker les méta-données pour chaque fichier qu'il possède des cartes à l'intérieur, mais cela ne me permet pas d'interroger les articles par date, note, etc.

I suis honnêtement coincé et ne peux pas penser à un moyen de structurer mes éléments de base de données d'une autre manière de faire ce travail. Est-ce faisable avec DynamoDB?

+0

Avez-vous envisagé d'ajouter une clé de plage comme repère pour chaque image, tout en conservant la clé primaire en tant qu'identifiant cognitif? – Ashan

+0

@Ashan Merci beaucoup, cela a effectivement fonctionné. J'ai recréé la table et ajouté une clé de tri sur la configuration. – domp

+0

Aucun problème. J'ai mis à jour la réponse pour d'autres références futures. – Ashan

Répondre

1

Vous pouvez créer une clé de plage avec un ID unique pour chaque fichier, tout en conservant la clé primaire en tant qu'ID Cognito qui permet de conserver l'autorisation détaillée de DynamoDB.