ASP.net-Rollen und -Projekte

BEARBEITEN - Meine ursprüngliche Frage wurde umgeschrieben, um ein bisschen mehr Informationen zu geben

Hintergrundinformation
Bei meiner Arbeit arbeite ich an einer ASP.Net-Webanwendung für unsere Kunden. In unserer Implementierung verwenden wir Technologien wie Formularauthentifizierung mit MembershipProviders und RoleProviders. Alles lief gut, bis ich einige Schwierigkeiten beim Konfigurieren der Rollen bekam, da die Rollen nicht systemweit sind, sondern sich auf die Kundenkonten und -projekte beziehen.

Ich kann unsere genaue Aufstellung / Formel nicht nennen, weil ich denke, dass unsere Firma das nicht gutheißen würde ...

Was ist ein Kunde / Projekt?
Unser Unternehmen stellt unseren Kunden jährlich (oder in anderen Intervallen) Managementinformationen zur Verfügung.
In unseren Systemen besteht ein Kunde / Vertrag aus:

Ein Konto: Informationen über das UnternehmenPro Konto ein oder mehrere Produkte: Das Bündel von Verwaltungsinformationen, die wir bereitstellenPro Produkt eine oder mehrere Messungen: Ein Zeitraum, in dem wir die Daten erfassen und melden

Einrichtung der Extranet-Site
Schließlich möchten wir, dass alle Kunden über unser Online-System auf ihre Verwaltungsinformationen zugreifen können. Das Extranet besteht aus zwei Sites:

Unternehmenswebsite: Bietet einen Überblick über Kontoinformationen und ProdukteMessstelle: Nach Auswahl einer Messung detaillierte Informationen zu diesem Zeitraum

Die Messstelle ist der interessanteste Teil des Extranets. Wir erstellen Submodule für neue Übersichten, Berichte, die Verwaltung und Pflege von Ressourcen, die für die Forschung wichtig sind.

Unsere Visual Studio-Lösung besteht aus einer Reihe von Projekten. Eine Webanwendung namens Portal als Basis. Die Sites und Module sind virtuelle Verzeichnisse in dieser Anwendung (erleichtert die gemeinsame Nutzung von MasterPages unter anderem).

Welche Rollen?
Die folgenden Benutzer (gelesen: Rollen) werden das System verwenden:

Administratoren: Entwickler :) (nicht kundenbezogen, Vollzugriff)Mitarbeiter: Mitarbeiter unseres Unternehmens (nicht kundenbezogen, Vollzugriff)Customer SuperUser: Top-Level-Manager (uneingeschränkter Zugriff auf ihr Konto / ihre Messung)Kundenkontaktperson: primärer Kontakt (uneingeschränkter Zugriff auf ihre Messung (en))Kundenmanager: ein Abteilungsleiter (eingeschränkter Zugriff, spezifische Daten einer Messung)

Was ist mit ASP.Net-Benutzern?
Das System wird viele ASP.Net-Benutzer haben, konzentrieren wir uns auf die Kundenbenutzer:

Benutzer werden nicht zwischen Konten geteiltSuperUser X hat automatisch Zugriff auf alle (und neue) MessungenBenutzer Y kann der Hauptkontakt für Messung 1 sein, hat jedoch keine Rolle für Messung 2Benutzer Y kann der Hauptkontakt für Messung 1 sein, hat jedoch eine Managerfunktion für Messung 2Die Abteilungsleiter sind viele einzelne Benutzer (pro Messung). Wenn Manager Z ein Login für Messung 1 hatte, möchten wir dieses Login erneut verwenden, wenn er an Messung 2 teilnimmt.

URL-Struktur
Dies sind typische URLs in unserer Anwendung:

http: // host / login - der Anmeldebildschirmhttp: // host / project - das Konto- / Produktübersichtsbild (Maßauswahl)http: // host / project / 1000 - Angaben zur Messung (ID: 1000)http: // host / project / 1000 / planning - Planungsübersicht (für Erstkontakt / Superuser)http: // host / project / 1000 / reports - Downloads von Berichten (Manager-Abteilung X kann nur auf Bericht X zugreifen)

Wir erstellen auch eine Dokument-URL, unter der Sie ein bestimmtes Dokument über seine GUID anfordern können. Das System muss prüfen, ob der Benutzer Rechte an dem Dokument hat. Das Dokument bezieht sich auf eine Messung, der Benutzer oder bestimmte Rollen haben bestimmte Rechte an dem Dokument.

Was ist das Problem? (schließlich ;))
Rollen sind nicht genug, um zu bestimmen, was ein Benutzer sehen / auf ein bestimmtes Element zugreifen / es herunterladen darf. Es reicht nicht aus zu sagen, dass Manager auf ein bestimmtes Navigationselement zugreifen können. Wenn der Benutzer Measurement 1000 anfordert, müssen wir überprüfen, ob der Benutzer nicht nur eine Manager-Rolle hat, sondern auch eine Manager-Rolle für Measurement 1000.

Zusammengefasst:

Wie können wir Benutzer auf ihre Konten / Messungen beschränken?
(Denken Sie daran, Superuser sehen alle Messungen, einige Manager nur bestimmte Messungen)

Wie können wir Rollen auf Produkt- / Messebene anwenden? (Benutzer X könnte Hauptkontakt für Messung 1 sein, aber nur ein Manager für Messung 2)

Wie können wir den Managerzugriff auf den Berichtsbildschirm und nur auf die Berichte ihrer Abteilung beschränken?

Alles mit der Magie von asp.net-Klassen, vielleicht mit einer benutzerdefinierten Implementierung eines Rollenproviders.

Ähnliche Stackoverflow-Frage / Problem
ASP.NET, Verwalten von Benutzern mit unterschiedlichen Rollentypen

Antworten auf die Frage(4)

Ihre Antwort auf die Frage