2011-01-15 4 views
0

Ich benutze benutzerdefinierte Benutzerzugehörigkeit in asp.NET so Benutzer ist ein Objekt, das Mitglieder enthält. Eines der Mitglieder des Benutzers ist "IsCompanyAdmin". Ich habe ein paar aspx Seiten nur für Firmenadministratoren. Gibt es eine Möglichkeit, diese Seiten von Nicht-Administrator-Benutzern zu verhindern, die die web.config verwenden?verhindern Seiten in web.config nach Benutzerelement

+0

verwenden Sie auch einen benutzerdefinierten Rollenanbieter? – Josh

+0

@Josh: Ja, tue ich. – Naor

Antwort

1

In ASP.Net ist die Standardmesse für die Beschränkung des Zugriffs auf Seiten in der Konfiguration über die Location element.

Im folgenden Beispiel werden alle Benutzer eingeschränkt, mit Ausnahme von Benutzern, die sich in der Rolle "Administrator" befinden. Dies setzt jedoch voraus, dass Sie eine RoleProvider konfiguriert haben.

<location path="RestrictedPage.aspx"> 
    <system.web> 
     <authorization> 
     <allow roles="Admin" /> 
     <deny users="*" /> 
     </authorization> 
    </system.web> 
</location> 

Es gibt several examples, wie Sie Ihre eigenen benutzerdefinierten Rollenanbieter zu implementieren, aber wenn man damit durchkommen kann, dann würde ich das in SqlRoleProvider gebaut verwenden.

+0

Ich habe keine Admin-Rolle, und ich möchte keine machen. Meine Trennung in Rollen erfolgt nach Modulen: Modul1, Modul2, ... Admin ist kein Modul, daher erstelle ich ein Mitglied im Benutzerobjekt, das angibt, ob der Benutzer ein Administrator ist. – Naor

+0

Die einzige andere Möglichkeit wäre, ein eigenes HttpModule zu erstellen, um Informationen aus web.config zu laden und dann eingehende Anfragen zu prüfen, um den Zugriff basierend auf Ihrem benutzerdefinierten Mitgliedschaftsobjekt zu beschränken. Es ist wirklich nicht sehr schwierig, wenn auch etwas langweilig. – Josh

1

Wenn ich Ihr Problem richtig verstehe, müssen Sie keine Rolle in der Datenbank haben.

Was können Sie in Ihrer CustomRoleProvider GetRolesForUser-Methode tun, geben Sie eine Zeichenfolge [] zurück, die je nach Benutzer Rollen enthält. Das Berechtigungsmodul verwendet diese Rollen. Sagen Sie also Ihre Eigenschaft IsCompanyAdmin = "true", dann fügen Sie "Admin" zur Zeichenfolge [] hinzu.

Dann sollte der Standortvorschlag von Josh funktionieren, als ob Sie eine "Admin" -Rolle in der Datenbank haben.

+0

Korrekt, alle Sicherheitsprüfungen werden basierend auf dem Principal-Objekt durchgeführt, das an den aktuellen Thread gebunden wird. Und nur um zu bemerken, dass die Rolle sein kann, was immer Sie wollen ... "Bob", "Larry", etc ... – Josh

+0

Bitte lesen Sie meinen Kommentar zu Josh. – Naor

+0

@Naor: Entschuldigung, vielleicht verstehe ich das Modul nicht ganz. Macht es Ihnen etwas mehr zu erklären? – gbs

Verwandte Themen