2012-04-03 12 views
2

Ich bin neu die .NET und MVC3 und ich bin gerade mitten in der Umwandlung einer langjährigen klassischen ASP-Website in eine MVC3-Anwendungsseite.MVC3 <Authentifizierung> und <Autorisierung> in einem <location> Attribut

Die gleiche Website hat vier Bereiche, in denen ich eindeutige Anmeldeseiten und diskrete Ebenen von Zugriff und Sicherheit benötigen würde. Das bedeutet, ich will nicht den Standardcode in meiner web.config-Datei verwenden:

<authentication mode="Forms"> 
    <forms loginUrl="~/Account/Logon" timeout="2880" /> 
</authentication> 

Stattdessen ich möchte in der Lage sein, Bereiche einzurichten innerhalb meiner Anwendung und verwenden Sie dann die <location> Attribut festlegen up Authentifizierung und Autorisierung Regeln für jeden. So zum Beispiel:

<location path="AreaName"> 
<system.web> 
    <authentication mode="Forms"> 
    <forms loginUrl="~/AreaName/Login" timeout="15" /> 
    </authentication> 
    <authorization> 
    <deny users="?"/> 
    </authorization> 
</system.web> 
</location> 

Wenn ich entfernen Sie diese drei Zeilen:

<authentication mode="Forms"> 
    <forms loginUrl="~/AreaName/Login" timeout="15" /> 
    </authentication> 

Dann, wenn ich versuche, auf in dem Pfad eine der Ansichten für den Zugriff auf „areaname“ Ich werde zuerst zurück zu ~/umgeleitet Konto/Anmelden Wenn ich diese drei Zeilen zurück in setzen, bekomme ich folgende Fehlermeldung:

Parser Error Message: It is an error to use a section registered as allowDefinition='MachineToApplication' beyond application level. This error can be caused by a virtual directory not being configured as an application in IIS.

ich gesucht habe gegen diesen Fehler und keiner der Vorschläge gemacht scheint anzuwenden. Ich habe eine Antwort gefunden, wo die Logik auf den Controller statt in der Web-Konfiguration gesetzt werden sollte, aber diese Methoden bedeuten immer noch, dass Sie den Standard <authentication> für die gesamte Website verwenden werden.

Ich verstehe nicht, warum ich keine <authentication> Eigenschaft innerhalb einer <location> haben kann. Jede Hilfe dazu würde sehr geschätzt werden.

Ich entschuldige mich, wenn ich irgendeine dieser Frage falsch formuliert habe.

+0

Scheint dies, weil in der Datei Machine.config für das ASP.NET-Framework die Einstellung von 'allowDefinition =" MachineToApplication "für den Abschnitt Authentifizierung festgelegt ist. Ich denke also, meine Frage wird, gibt es eine Möglichkeit, diese Einstellung in der machine.config zu übersteuern und es so einzustellen, 'allowDefinition =" Everywhere "' in meiner web.config-Datei für Anwendungen zu sagen? – Peter

Antwort

0

Wahrscheinlich benötigen Sie einen benutzerdefinierten Mitgliedschaftsanbieter und einen benutzerdefinierten Rollenanbieter (falls erforderlich) ... hier ist ein Beispielpost Custom membership providers in ASP.NET ... Wenn Ihr Anliegen die Zugriffsebene ist, müssen Sie einen benutzerdefinierten Rollenanbieter verwenden. ..

+0

Danke, aber wie ich in meiner Frage gesagt habe, bin ich nicht daran interessiert, dass alles über eine einzige Anmeldeseite trichteriert wird - ich möchte in der Lage sein, für jeden der geschützten Bereiche einzigartige Anmeldeseiten zu haben. Der letzte Schritt zeigt weiterhin, dass die Anweisung "[Autorisieren]" auf einzelne Aktionen im Controller angewendet wird. – Peter

+0

ok ... meine nächste Frage ist, warum Sie mehrere Login-Seiten haben müssen ... wenn Sie Mitgliedschaftsrollen haben könnten ... sagen Sie zum Beispiel, wenn Sie einen Admin-Bereich haben ... Sie brauchen keine Login-Seite für ein Admin ... Sie können immer noch dieselbe Login-Seite benutzen ... aber dieses Mal werden Sie die Admin-Rolle zur Benutzeridentität hinzufügen ... und Ihr Autorisierungs-Attribut wird aussehen wie [Autorize (Roles = RoleNames.Admin)]. Auf diese Weise können Sie eine Login-Seite verwenden ... – NiK

+0

Ich baue keine Site von Grund auf neu - die vier Bereiche haben jeweils ihre eigenen Benutzerdatenbanken und in drei dieser Bereiche gibt es Funktionen für Benutzer und Administratoren - und einen Admin von einem Bereich ist kein Administrator des zweiten Bereichs oder des dritten. Diese Datenbanken können nicht zusammengeführt oder verändert werden, noch habe ich den Luxus, sie zu verwerfen und mit einer brandneuen Datenbank zu beginnen. Warum kann ich nicht einfach eine eindeutige Berechtigung auf Standort-Ebene verwenden? – Peter