Question

J'utilise le modèle de référentiel pour interroger notre base de données à l'aide de NHibernate. Il est très facile de faire des choses comme:

public T GetById (int id) {...}

Mais cela n’aide pas beaucoup quand quelqu'un commence à fouiller dans les chaînes de requête pour voir des choses qu’il n’est pas autorisé à voir.

Pour le composer, certains objets sont des enfants profondément imbriqués de l’objet parent sur lequel l’autorisation doit être effectuée.

Par exemple blog - > auteur - > post - > commentaire. Dans cet exemple artificiel, nous aimerions donner aux auteurs la possibilité de modifier leurs propres publications et commentaires sur ces publications, sans toutefois voir ni modifier celles d'autres auteurs. Il est facile de vérifier que le message appartient à l'auteur, il est un peu plus difficile de s'assurer que le commentaire appartient à l'auteur. Nous avons des exemples qui vont plus loin.

Alors ... comment fait-on l'autorisation (dans le modèle ou le référentiel)?

Était-ce utile?

La solution

Vous pouvez implémenter le motif de décorateur - je suppose que vous utilisez un conteneur DP / IoC pour injecter vos dépôts IR?

Vous créez un ISecureRepository qui vérifie que les appels effectués sont valides pour le type d'utilisateur / de demande spécifique, puis retransmet l'appel sur l'IRepository. Cela vous donne également la possibilité d’appeler la méthode, puis de vérifier le type de retour ...

Vous devez alors configurer votre IoC pour utiliser un référentiel ISecure intégré à IRepository ...

Ça a l'air si simple ...

Autres conseils

Cela pourrait être une bonne implémentation pour vos besoins: http: // www .codeproject.com / KB / sécurité-Web / objectlevelsecurity.aspx , il s’agit d’un modèle basé sur une liste de contrôle d’accès.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top