Wie vermeidet man die Verwendung eines Mitgliedschaftsanbieters?

8

Wir bauen derzeit Architektur für Thin-Client-Buchhaltungsanwendungen. Es sollte zwei Hauptanforderungen folgen:

  1. Die Anwendung sollte Moduldesign haben. Jedes Modul kann ein eigenes Rollensystem haben (und das hat es tatsächlich).
  2. Spätere Anwendung sollte für den Betrieb mit verschiedenen Datenbanken auf verschiedenen Rechnern angepasst werden.

Wir denken, Asp.NET MVC 3 ist eine geeignete Plattform für diese Aufgabe. Für die Verwaltung von Anwendungsdaten haben wir uns für die neueste Version von Entity Framework entschieden - die Menge an Datenprovidern und die Funktion Code First können uns viel Zeit sparen.

Der Teil, mit dem wir uns befassen, ist das Benutzer / Rollen-Management-System. Wir sollten eine Art von Global Administration-Sektion haben, um Benutzer hinzuzufügen und ihnen Zugriff auf Module zu geben (nur globale Administratoren können dem System Benutzer hinzufügen, keine "Typ von Straße" -Registrierung wird unterstützt) und jedes Modul hat seinen eigenen Administrationsbereich mit eigenen Admins und Rollen. Wir haben bereits ein Datenmodell, um alles, was wir brauchen, in geeigneter Weise zu speichern, haben aber keine Ahnung, wie wir von der Anwendung aus auf diese Daten zugreifen können.

Derzeit sehen wir zwei mögliche Wege, um dieses Problem zu lösen:

  1. Um benutzerdefinierte Mitgliedschafts- und Rollenanbieter basierend auf unserer DAL zu schreiben. Niemand aus unserem Team hat das schon einmal gemacht, also sind wir uns nicht sicher, ob es sich auf diese Weise lohnt. Der Anbieter einer Mitgliedschaft kann nicht so viel Flexibilität bieten wie die Anforderungen der Anwendung, daher sind einige Crunches erforderlich.
  2. Durch einige veraltete Bücher zu graben, um herauszufinden, wie das Verwaltungssystem der Websites organisiert wurde, bevor die Mitgliedschaftsanbieter erstellt wurden.

Beide Wege sind nicht elegant und nicht offensichtlich für uns und es ist keine einfache Frage, welche Art und Weise zu wählen. Wir glauben auch, dass es eine andere Lösung sein kann (von Grund auf kann Architektur betroffen sein). Wir würden uns freuen, Vorschläge zu diesem Problem zu sehen.

    
yauheni_selivonchyk 28.07.2011, 16:17
quelle

4 Antworten

1

Nun, endlich haben wir beschlossen, alles von Grund auf neu zu schreiben und es war einfacher, dass es so zu sein schien

  • Fügen Sie eigene IPrincipal-Implementierung hinzu. Zusätzliche Felder und völlig unterschiedliche Logik für die IsInRole () -Methode, um das Schreiben eigener Attribute zu vermeiden.
  • Zuweisung unseres IPrincipal in Global.ajax-Ereigniss an Benutzer.

Es war überhaupt nicht schwer. Jetzt haben wir alle Flexibilität, die wir wollten. Keine Anbieter beteiligt.

    
yauheni_selivonchyk 12.10.2011, 07:29
quelle
4

Ich würde persönlich empfehlen, den Standard-Mitgliedschaftsanbieter zu verwenden, um Benutzer zu erstellen und zu authentifizieren, und wenn Sie sich vergewissert haben, dass der Benutzer nicht nur ein "Typ von der Straße" ist, verwenden Sie Ihre eigene benutzerdefinierte Architektur Überprüfen, ob der authentifizierte Benutzer Zugriff auf den Controller und die Aktion hat, auf die er zugreifen möchte.

Der integrierte Mitgliedschaftsprovider kümmert sich um viele Nuancen in Bezug auf Benutzerauthentifizierung, Passwortspeicherung und dergleichen. Es verwendet Best Practices, um Brute-Force-Angriffe, Rainbow-Table-Angriffe usw. zu vermeiden. Es ist erprobt und wahr.

Es klingt jedoch so, als ob Ihre Berechtigungsstruktur pro Modul der Form der ASP.NET-Rollenanbieter entspricht. Wenn das der Fall ist, ist das gut und schön, und es wäre eine gute Idee, einen benutzerdefinierten Rollenanbieter zu implementieren. Aber wenn Ihre Anforderungen "out of the box" sind, werden Sie wahrscheinlich besser dran sein, indem Sie die Rechte an dem für Sie am besten geeigneten Punkt manuell überprüfen (Controller, Aktion, Anforderungsfilter, etc.).

    
StriplingWarrior 28.07.2011 16:23
quelle
3

Ich würde Sie ermutigen, einen benutzerdefinierten Mitgliedschaftsanbieter zu verwenden. Warum? Weil es der Standardweg ist und dir viele Arbeiten ersparen wird. Es ist nicht so schwer, wie ich vielleicht sehe, und es gibt Tonnen von Ressourcen wie dieser .

    
Erre Efe 28.07.2011 16:21
quelle
3
  
  1. Um benutzerdefinierte Mitgliedschafts- und Rollenanbieter basierend auf unserer DAL zu schreiben.   Niemand aus unserem Team hat das schon einmal gemacht, also sind wir uns nicht sicher, ob dies der Fall ist   es lohnt sich die Mühe. Mitgliedschaftsanbieter kann nicht so viel anbieten   Flexibilität, wie es die Anwendung benötigt, so dass einige Crunches benötigt werden.
  2.   

Es lohnt sich sehr, wenn die Standardfunktionen nicht die Funktionalität bieten, die Sie benötigen. Wenn Sie bereits ein komplexes Benutzersystem in Ihrer Datenbank haben, ist wahrscheinlich ein benutzerdefinierter Mitgliedschaftsanbieter eine gute Idee.

Sie werden Ihrem Team wertvolle Erfahrungen hinzufügen, und Sie sollten in der Lage sein, einen Großteil des Codes in Ihrem nächsten Projekt wiederzuverwenden. Wie @Randolf sagte, gibt es viele gute Ressourcen für den Aufbau eines Kundenmitgliedschaftsanbieters, und ich spreche von etwas Erfahrung, wenn ich sage, dass es wirklich nicht so schwierig ist. Alles ist da, Sie müssen nur einige Methoden implementieren.

    
Nate 28.07.2011 16:26
quelle