2010-03-10 13 views
7

Wir entwickeln eine ASP.NET MVC-Anwendung, die derzeit eine eigene Datenbank ApplicationData für die Domänenmodelle und eine weitere Membership für die Benutzerverwaltung/Mitgliedschaftsanbieter verwendet.Verwenden der ASP.NET-Mitgliedschaftsanbieter-Datenbank mit Ihrer eigenen Datenbank?

Wir greifen auf Einschränkungen unter Verwendung data-annotations in unseren Controllern zu.

[Authorize(Roles = "administrators, managers")] 

Dies funktionierte gut für einfache Anwendungsfälle.


Da wir unsere Anwendung Skalierung unserer Kunden will specific users beschränken bestimmte Bereiche unserer ApplicationData Datenbank zuzugreifen.

Jedes unserer Produkte enthält einen Fremdschlüssel für die Region bezieht das Produkt in montiert wurde

Eine User Story wäre.

  • Benutzer in der Rolle NewYorkManagers sollte nur in der Lage sein, bearbeiten/sehen Produkte, die in New York zusammengestellt werden.

Wir haben einen Platzhalter Tabelle UserRightsRegions, die die UserId und die RegionId enthält.

Wie kann ich Link sowohl die ApplicationData und die Membership Datenbanken, um richtig zu funktionieren/cross-database-key-references zu haben? (Ist so etwas wie diese sogar möglich?)

All Hilfe mehr als geschätzt ist!

+0

Aus diesem Grund haben wir unseren eigenen Mitgliedschaftsanbieter eingerichtet. Es ist nicht schwer zu tun, aber es ist eine alternde API, der Sie folgen müssen, um eine ordnungsgemäße Integration mit dem Rest des ASP.NET-Frameworks zu erhalten. Sei dir bewusst, dass du mehr Zeit damit verbringst, als du denkst ... –

Antwort

2

Meiner Meinung nach, sollten Sie in der Lage sein, Ihre Datenbank mit dem Standard aspnet_db zuverlässig zu integrieren, aber ich würde davon abraten, duplizieren oder die aspnet_users Tabelle zu ersetzen.

Dies ist der Schwerpunkt aller Anbieter, die das Schema aspnet_db verwenden, einschließlich benutzerdefinierter Anbieter, die die benutzerdefinierte Ersetzung zwar erweitern, jedoch nicht implementieren.

Um die Wiederverwendung von stark getestetem Infrastrukturcode im Provider-Stack/API zu maximieren, ist es am besten, diesen Flow zu verwenden.

Sie werden sehr darauf achten, dass Ihre Kernfunktionen modifiziert werden, und sicherstellen, dass sich die neuen Abhängigkeiten in jedem Fall erwartungsgemäß verhalten.

Die Facette der Mitgliedschaftsgeschichte, die ich gefunden habe, benötigt die meiste Aufmerksamkeit, einen Benutzer zu löschen, und eine einfache Änderung/ein Zusatz zum Löschbenutzer sproc kann dieses fähig handhaben.

0

Es klingt, als müssten Sie möglicherweise Ihren eigenen benutzerdefinierten Mitgliedschaftsanbieter erstellen. Sie können (wahrscheinlich nicht positiv) das bestehende erweitern, damit Sie es nicht komplett neu erfinden müssen. Here ist ein Video von ASP.net, das beschreibt, wie man das macht. Google "asp.net-Mitgliedschaftsanbieter" für Tonnen mehr.

0

Sie können versuchen, Ihre eigene Mitgliedschaft rollen oder erweitern einfach ist wie Dave schlägt.

Erstellen Sie Ihre eigene [Users] Tabelle, die basierend auf der aspnet_Membership-Tabelle ausgefüllt werden kann. Also könntest du mehr Kontrolle darüber haben.

Sie könnten auch ein komplizierteres Profiles-System implementieren. Das .NET-Team hat die Art und Weise, wie Profile jetzt gespeichert werden, verbessert. Anstatt sie zu "blobalisieren", können Sie sie jetzt so einrichten, dass sie in einer aktuellen Tabelle gespeichert werden [Gott sei Dank].

Table Profile Provider

0

Wenn Sie die richtigen Artikel finden, ist es sehr einfach, den Mitgliedschaftsprovider zu erweitern, um zusätzliche Funktionalität zu ermöglichen. Ich habe meine Benutzertabelle in meine SQL Server-Haupttabelle verschoben und meinen eigenen Rollenmanager geschrieben, der Werte aus einer separaten Tabelle bezieht. Wie es sich anhört, müssen Sie eine Tabelle in der Benutzerdatenbank mit dem Speicherort jedes Benutzers einrichten und dann eine Methode für das Benutzerobjekt erstellen, etwa "GetLocation()", die den Standort des Benutzers aus der DB zurückgibt könnte dann das verwenden, um Ihre Daten aus Ihrer Hauptdatenbank zu filtern. Hier sind ein paar Artikel, die ich in meinen Lesezeichen herumgetreten bin, um zu sehen, ob sie helfen, wenn du einen Blick auf die ASP.NET-Hauptseite oder den Google-Mitgliedserweiterungs-Anbieter schaffst, gibt es viele davon. http://msdn.microsoft.com/en-us/library/ms998347.aspx http://www.4guysfromrolla.com/articles/120705-1.aspx http://msdn.microsoft.com/en-us/library/aa479048.aspx

0

Wie die anderen gibt es viele gute Ressourcen, dass Sie verfügbar sind darauf hingewiesen haben helfen Sie mit Ihrer benutzerdefinierten Anbieter mit der vorhandenen Datenbank.

Es sieht so aus, als ob Sie mit Zuordnungstabellen in die richtige Richtung gehen. Ich denke, das einzige Stück, das Sie vermissen, ist Distributed Queries. Dieser Link ist spezifisch für Sql Server 2008. Es gibt dort einen Link zur Dokumentation für Sql Server 2005, wenn Sie das verwenden.

Verwandte Themen