2008-12-09 14 views
9

Je fais de mon mieux pour concevoir mon application Web avec une bonne séparation entre les couches. J'utilise le modèle de référentiel et en tant que tel ai un SQLObjectRepository qui est appelé par mon ObjectService qui est appelé par mon front Web.Repository Pattern et superposition. Où puis-je appliquer la sécurité?

Dans mon modèle objet, l'utilisateur est associé à une ou plusieurs régions qui doivent filtrer les objets auxquels il devrait avoir accès. Ma question est la suivante: lorsque j'interroge des objets, dois-je mettre le code dans le service pour définir les autorisations sur les objets ou doit-il être dans le référentiel? Si l'utilisateur est membre de 2 régions, dois-je passer l'utilisateur en tant que paramètre au service, ou dois-je passer les régions de l'utilisateur au service?

Répondre

3

Je voudrais:

  • le chèque de sécurité de telle sorte qu'il puisse être appliqué dans un endroit que vous aimez. De cette façon, vous pouvez refactoriser lorsque les exigences changent.

  • Si la vérification de la sécurité va vraiment toujours appliquer, placez-le dans la couche de dépôt (ou mieux, dans un aspect si votre langue prend en charge) afin que plusieurs services seront tous parts de sécurité commune si elles utilisent le même référentiel . Sinon placez-le dans le service (ou un aspect agissant sur le service).

  • passent au mécanisme de vérification de la sécurité entière de l'objet utilisateur:

    • si la vérification de la sécurité devient plus tard plus complexe (dépend d'autres propriétés de l'utilisateur) l'API ne changera pas;
    • cela a un sens plus sémantique - vous vérifiez que l'utilisateur a la permission de faire quelque chose, pas une liste de pays.