2009-07-30 9 views
1

Ich habe eine Reihe von verschiedenen Rollen in meiner asp.net-Website definiert: Administratoren, DefaultUsers. Zur Zeit verwende ich den eingebauten Profilanbieter, um einige Informationen über den Benutzer (Vorname, Nachname, Avatar ...) zu speichern. Was ich als nächstes tun möchte, ist die Bereitstellung eines Benutzers, der die Rolle "Admistrators" hat, um einige Daten über seine Präferenzen zu speichern. (vielleicht EditorType, Benachrichtigungen, LogSize ...).Rollenbasierte Profildaten in asp.net ProfilProvider

Ist es etwas, was mit dem Standard-Profil-Provider getan werden kann? Oder muss ich eine benutzerdefinierte Tabelle oder einen benutzerdefinierten Anbieter erstellen und diese Daten selbst verwalten? Was ich gerne hätte, sind rollenbasierte Profileigenschaften. Irgendwelche Ideen sind willkommen!

Antwort

0

Was Sie erreichen möchten, ist nicht möglich, da ein Profil an einen Benutzer und nicht an eine Rolle bindet. Benutzer können mehrere Rollen haben, aber nicht mehrere Profile.

Wenn Sie es trotzdem tun möchten, können Sie weiterhin Eigenschaften erstellen, die für alle Benutzer verfügbar sind, aber nur für Administratoren. nur Rolle. Sie können diesen Code einchecken.

Ich empfehle Ihnen, ProfileProvider in diesem Szenario nicht zu verwenden. In diesem Fall wird alles als Text gespeichert, was die Anwendungsleistung stark beeinträchtigt.

0

Mit dem Standardprofilanbieter können Sie diese zusätzlichen Eigenschaften nur für Administratoren hinzufügen. Natürlich werden sie für alle Benutzer verfügbar sein, aber es ist einfach genug, um das vom Code zu kontrollieren.

Als zusätzlichen Vorteil, wenn jemand ihre Administratorrechte vorübergehend widerrufen hat, wird die Information immer noch gespeichert, und wenn sie sie zurückbekommen, sind alle ihre alten Werte immer noch da. Natürlich können Sie sie löschen oder nicht, je nach Ihren Anforderungen.

Wie bei jedem Sicherheitssystem sollte das Vorhandensein einer bestimmten Eigenschaft für einen Benutzer nicht auf eine Rollen-/Gruppenzugehörigkeit schließen. Stellen Sie daher sicher, dass Sie Ihre user.IsInRole ("Administrators") überprüfen.

0

Sie können das integrierte rollenbasierte System nicht wirklich erweitern, wie der andere Beantworter bereits bemerkt hat.

Was Sie jedoch tun könnten, um Ihre derzeitigen ASP.NET-Mitgliedschafts- und Rollenanbieter zu behalten und weiterhin von ihren Diensten zu profitieren, ist einfach eine Erweiterungstabelle für die aspnet_Roles zu erstellen. Etwas wie folgt aus:

CREATE TABLE dbo.MyOwnRoleExtensions 
(ExtensionID INT IDENTITY(1,1) PRIMARY KEY, 
ApplicationId uniqueidentifier, 
RoleId uniqueidentifier, 
(whatever fields you need here......) 
) 

Sie dann eine Fremdschlüsselbeziehung zu dem aspnet_Roles Tabelle (ApplicationId, RoleId) und damit assoziieren Ihre „Rolle extensions“ Tabelle mit der Basis aspnet_Roles Tabelle etablieren konnte.

Natürlich, wenn Sie die zusätzlichen Felder in Ihrer Erweiterungstabelle abrufen müssen, müssen Sie dies in Ihrem eigenen Code tun - aber auf diese Weise können Sie immer noch alle Feinheiten des eingebauten verwenden und nutzen ASP.NET-Mitgliedschaft und Rollenanbieter und Sie benötigen keine schmutzigen Hack oder irgendetwas.

Marc

Verwandte Themen