Frage

Ich verwende das Repository-Muster mit Hilfe unserer Datenbank NHibernate abzufragen. Es macht es einfach, Dinge zu tun wie:

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

Aber das nicht viel helfen, wenn jemand mit dem querystrings Ausmisten beginnt die Dinge zu sehen, sie sind nicht erlaubt.

Um es zu verschlimmern, sind einige Objekte tief verschachtelte Kinder des übergeordneten Objekts, die die Genehmigung soll durchgeführt werden.

Zum Beispiel Blog -> Autor -> post -> Kommentar. In diesem erfundenen Beispiel würden wir Autoren gerne die Möglichkeit geben, ihre eigenen Beiträge und Kommentare zu Beitrag bearbeiten, nicht aber die von anderen Autoren sehen oder bearbeiten. Es ist einfach, die Post gehört dem Autor zu überprüfen, ist es ein wenig schwieriger ist, um sicherzustellen, dass der Kommentar des Autors gehört. Wir haben einige Fälle, die tiefer gehen.

So ... wie können wir tun Genehmigung (im Modell oder Repository)?

War es hilfreich?

Lösung

Sie könnten das Decorator-Muster implementieren - ich nehme an, Sie einen DP / IoC Container verwenden Ihre IRepositories zu injizieren

?

Sie würden ein ISecureRepository erstellen, die die Anrufe überprüft gelten für den jeweiligen Benutzer / Anfragetyp, und übergeben dann den Anruf zurück auf die IRepository. Diese Sie auch die Möglichkeit geben, die Methode aufzurufen, und dann den Rückgabetyp prüfen ...

Sie würden dann Setup sind Sie IoC ein ISecureRepository verwenden umschlungen IRepository ...

Sounds so einfach ...

Andere Tipps

Dies könnte eine gute Implementierung für Ihre Bedürfnisse: http: // www .codeproject.com / KB / Web-Sicherheit / objectlevelsecurity.aspx , es ist ein ACL-basiertes Modell.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top