Question

J'essaie de comprendre comment le côté lecture de CQRS peut travailler avec une grande application de gestion de documents (vidéos / fichiers PDF / etc) que nous écrivons.

Nous voulons montrer une liste de tous les documents que l'utilisateur doit modifier l'autorisation de (à savoir afficher tous les documents que l'utilisateur peut modifier) ??pourrait être 10,000s .Il des documents qu'un utilisateur particulier pourrait modifier.

En général, j'ai lu que le une seule « table » (structure plate) devrait suffire pour la plupart des écrans et des autorisations que vous pourriez avoir une table par rôle.

Comment puis-je concevoir mon modèle de lecture pour me permettre d'obtenir rapidement les documents que je peux modifier pour un utilisateur spécifique?

À l'heure actuelle, je peux voir une table tenant tenant mes documents, un autre tenant les utilisateurs et une autre table qui relie le rôle « d'édition » entre l'utilisateur et les documents. Donc, je fais joint pour obtenir les données pour cet écran.

En outre, il pourrait y avoir des rôles pour la suppression, la visualisation etc.

Est-ce la bonne façon dans ce cas?

JD

Était-ce utile?

La solution

Vous pouvez fournir une table plate qui a un nom d'utilisateur ainsi que les informations de documents dénormalisé respectifs.

SELECT * FROM documents_editable_by_user WHERE UserId = @UserId
SELECT * FROM documents_deletable_by_user WHERE UserId = @UserId
SELECT * FROM documents_visible_for_user WHERE UserId = @UserId

Mais vous pourriez même créer dynamiquement une table / liste par utilisateur dans votre magasin de modèle de lecture. Cela devient très facile une fois que vous passez d'un magasin de lecture basée sur SQL à NoSQL (si vous avez pas déjà).

Surtout quand il y a des dizaines de milliers de documents visibles pour ou modifiables par un utilisateur, tables aplati peuvent donner un coup de pouce réel de la performance par rapport aux jointures.

Autres conseils

Quand j'avais un modèle de lecture qui a pris la forme d'un filtrage Formulaire de recherche (jeu de mots n'a pas pour but), j'ai utilisé rhino-sécurité comme fondement d'un service d'autorisation.

J'ai configuré le système pour que les tables du service d'autorisation a été repoussée par le système pub sous SQL Server et SQL Server Agent, aux clients qui manifestaient en partie les données dénormalisées - je laisse alors

scroll top