2010-08-06 5 views
0

Je conçois un système de gestion de cours qui a différents types d'utilisateurs, y compris sysadmin, directeur de succursale et utilisateur de branche. Comme vous pouvez vous y attendre, sysadmin peut gérer tous les enregistrements, le gestionnaire de succursale peut gérer tous les enregistrements de sa branche et l'utilisateur de la succursale ne peut gérer que ses enregistrements.Où dois-je filtrer les enregistrements?

Ma question est: où ce filtrage devrait-il être fait? Dois-je le faire à la couche DAL? Ou juste renvoyer tous les enregistrements de la DAL et ensuite faire le filtrage à une autre couche? J'ai cherché partout les meilleures pratiques en matière d'autorisation mais je n'ai rien trouvé qui explique clairement cet aspect.

Répondre

2

En général, la sélection d'enregistrements de base de données, pour une raison quelconque, doit être effectuée par la base de données --- c'est son travail.

De plus,

  • Vous ne voulez pas les enregistrements inutiles gaspiller la bande passante entre votre serveur de base de données et l'ordinateur client.
  • Vous ne souhaitez pas que des enregistrements inutiles occupent de la mémoire sur votre machine client.
  • Vous ne voulez pas d'enregistrements non autorisés en mémoire sur votre machine client où ils pourraient être piratés.
0

La réponse au niveau de l'implémentation à cette question dépendra fortement de vos outils. Est-ce que ce sera .NET, Java, PHP, Python?

Votre DAL ne devrait concerner que le retour et la validation de données dans un magasin de données. Le filtrage tel que vous le décrivez est mieux géré au niveau intermédiaire, avec la logique métier. La plupart des requêtes se produiront dans le contexte de l'utilisateur connecté afin que les données appropriées soient renvoyées, alors gardez cela à l'esprit lorsque vous concevez le système.

MISE À JOUR:

Compte tenu de .NET et NHibernate, NHibernate est votre ORM/DAL. Le DAL devrait idéalement être une implémentation de Repository pour vous permettre d'obtenir des données dans et hors de votre base de données.

Concevoir un modèle de domaine pour gérer les relations entre utilisateur, rôle et branche. Chaque entité a des relations avec les autres entités. Les "enregistrements" de ces branches doivent également être modélisés en tant qu'entités. Une fois que vos relations sont établies dans votre modèle, vous pouvez concevoir des méthodes sur chaque entité qui récupère les entités associées. Vous pouvez considérer ce modèle comme une sorte de ViewModel ou Controller. Son travail consiste à implémenter explicitement la relation entre les entités, en créant une abstraction "supérieure" à celle fournie par NHibernate.

+0

Ceci est .NET en utilisant NHibernate pour le DAL. Ce que je ne sais pas, c'est si je devrais rendre la DAL au courant de l'utilisateur qui exécute les requêtes. – jesusbolivar

+0

En général, le DAL ne devrait rien savoir de la * nature * des données, juste comment l'obtenir dans et hors de la base de données. Vous devriez avoir un modèle de domaine au sommet de la couche d'accès au contenu qui comprend ce qu'est un utilisateur et à quels objets il devrait avoir accès. –

+0

Comment implémenteriez-vous une méthode comme GetRegistrationsForCourse? Où les enregistrements renvoyés doivent être filtrés en fonction de l'utilisateur qui les appelle. – jesusbolivar

Questions connexes