2010-12-10 4 views
5

Ich arbeite auf Asp.net-Anwendung, wo ich 4 Rollen in meiner Anwendung habe. 1. Admin 2. Benutzer 3. Wiederverkäufer 4. Partner. Und ich benutze Formular-Authentifizierung für diese alles funktionierte gut für einzelne Rolle (Benutzer). Aber jetzt habe ich 4 Rollen und ich verstehe nicht, wie ich das schaffen soll. Ich habe 4 Ordner für verschiedene Benutzer. Wenn ich mich mit dem Reseller-Account anmelde und die URL für den Benutzer ändere, kann ich auch auf den Benutzer-Teil zugreifen. Aber ich will das nicht. Ich brauche in meiner App, dass Benutzer nur auf seinen Zugangsbereich zugreifen können. Mittel Wenn sich Ihr Reseller angemeldet hat, kann er nur auf Reseller-Seiten oder den gleichen Ordner zugreifen, sonst nichts.Formular-Authentifizierung von Asp.net

Bitte helfen Sie mir, diese Lösung zu finden.

Antwort

0

Sie müssen für jeden Ordner die entsprechenden Authentifizierungseinstellungen in einer web.config-Datei festlegen Sie Zugang zu beschränken, das heißt

<authorization> 
    <deny users="?" /> 
    <allow roles="Administrators" /> 
    <deny users="*" /> 
</authorization> 

Wird Zugriff erlauben nur mit der Rolle des „Administrators“ zu validierten Benutzer.

+0

Sie benötigen die Anonymen Benutzer nicht verweigern. Sie benötigen nur die Rollen zulassen und alles ablehnen. – Phill

+0

Wahr, aber die Validierung ein wenig abkürzen, warum versuchen Sie eine Rolle Suche nach einem anonymen Benutzer. – Lazarus

+0

Nur neugierig ... warum die down vote? – Lazarus

1

Hier sind zwei Dinge zu sehen. Zunächst einmal sollte der Zugriff auf jeden Ordner nach der Rolle eingeschränkt werden, wenn Sie in Ihrer web.config z. B. <location> Elemente verwenden.

<location path="Resellers"> 
    <system.web> 
     <authorization> 
      <allow roles="Reseller"/> 
      <deny roles="*"/> 
     </authorization> 
    </system.web> 
</location> 

<location path="Users"> 
    <system.web> 
     <authorization> 
      <allow roles="User"/> 
      <deny roles="*"/> 
     </authorization> 
    </system.web> 
</location> 
... 

auch in Ihrer individuellen Seiten, können Sie die IsUserInRole Funktion aufrufen, um zu überprüfen, ob Ihre Benutzer in der richtigen Rolle ist auf die Seite zuzugreifen.

Vielleicht möchten Sie eine Kopie von Beginning ASP.NET Security bekommen, es hat tolle Informationen darüber, wie Sie das tun.

+0

Wird das nicht alle Rollen verweigern und dann aufhören? – Lazarus

+0

@Lazarus Möglicherweise ... Ich kann mich nie an alle Details des Autorisierungselements erinnern. Habe sie umgetauscht. – PhilPursglove

+0

Ich glaube, dass sie in der Reihenfolge der Definition verarbeitet werden :) – Lazarus

0

In jedem der Ordner müssen Sie eine Datei web.config platzieren, die den Zugriff auf die betreffende Rolle einschränkt. Zum Beispiel haben Sie im Ordner Wiederverkäufer ein web.config, das enthält:

Und so weiter für die anderen Ordner.

+0

Wont, dass die Deny alle Benutzer schlagen und aufhören? – Lazarus

0

Verwendung wie unten Code:

<location path="Users"> 
     <system.web> 
      <authorization> 
       <allow roles="Users"/> 
       <deny users="*"/> 
      </authorization> 
     </system.web> 
    </location> 
1

Sie die web.config verwenden können, die Erlaubnis zu setzen oder Sie können auch detailliertere und dekorieren die Klasse oder Methode, die Sie wollen sperren wie diese:

[PrincipalPermissionAttribute(SecurityAction.Demand, Role = @"Administrators")] 

All dies ist Teil des Rollen-Managers, den Sie einrichten können. Beginnen Sie mit dem Lesen this Artikel, der erklärt, was zu tun ist.