Verwalten Sie den Entitätszugriff und die Berechtigungen mit Entity Framework
In einer Webanwendung mit Entity Framework 4.1 verwenden wir die SQL Server-Mitgliedschaft, um den Benutzerzugriff zu verwalten. Wir müssen jedoch einen detaillierteren Satz von Rollen für die Berechtigungsverwaltung implementieren.
In der Datenbank haben wir bereits die relativen Tabellen angelegt:
- Roles
- Permissions
- UserInRole (roles per user)
- RolesPermissions (permissions associated to a role)
Durch die Verwendung von Attributen für einige der Hauptentitäten wird der Zugriff auf EF semantisch eingeschränkt. Wenn beispielsweise ein bestimmter Benutzer angegeben wird, kann er nur die relativen Versandaufträge oder zugehörigen Daten anzeigen.
Jetzt möchten wir die Berechtigungen einspeisen, was als Beispiel bedeutet, dass aKunde Aufträge anzeigen und erstellen, während aUnternehmen (dies sind zwei verschiedene Rollen) konnten nur Bestellungen für ihre Produkte sehen und auch Berichte drucken.
Die Idee wäre, Attribute auch für Berechtigungen auf Entitätsebene zu verwenden und zu überprüfen, ob der aktuelle Benutzer beim Aufrufen einer Methode die richtigen Rechte besitzt. Zum Beispiel:
public void BeforeAdd()
{
// Get required permissions for the specific entity (Order as example)
//Check that current user has permission of creating a new Order
}
Eine solche Methode würde von jeder Entität aufgerufen, sodass die Kontrolle über Berechtigungen auf Entitätsebene zentralisiert werden kann.
Wir verwenden MVC als Frontend und haben dort bereits Rollen- und Berechtigungszugriffe implementiert. Wir müssen dasselbe mit dem Backend-Teil (der die Datenschicht enthält) machen. Hierbei handelt es sich um zwei separate Server, die über Webdienste kommunizieren. Durch die Implementierung der Berechtigungsverwaltung im Back-End-Teil würde die Kontrolle über den Datenzugriff gestärkt.
Gibt es ein Muster oder eine bewährte Methode, die wir befolgen könnten (eventuell mithilfe einiger integrierter Funktionen von EF), um die Berechtigungsverwaltung zu erreichen?