2012-08-29 6 views
6

Ich benutze Rollenmanager und Windows-Authentifizierung für mein asp.net mvc-Projekt Wir haben 2 Rollen, die Viewer und Editoren sind.Asp.net MVC Rollenmanager

<authentication mode="Windows" /> 
    <roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider"> 
     <providers> 
      <clear /> 
      <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
     </providers> 
    </roleManager> 

Editor die gesamte Anwendung zugreifen können, aber Viewer kann nur Zugriff auf zwei Aktionen

Ich versuchte zunächst Autorisieren Attribut für Basis-Controller zu setzen, die Editor nur erlauben, alles zuzugreifen:

[Authorize(Roles = "Editors")] 
public class BaseController : Controller 

und Fügen Sie dann den beiden Aktionen Autorisierungsattribut hinzu:

[Authorize(Roles = "Viewers,Editors")] 
public ActionResult Report(PaymentsUnallocatedAndQueriedModel model) 

funktioniert nicht, der Viewer kann nicht auf Aktionen zugreifen, die jetzt sinnvoll sind.

Ich glaube, es ist keine gute Idee, Autorize-Attribut am Anfang jeder Aktion zu wiederholen.

Könnten Sie mir bitte sagen, ob es eine bessere Lösung für diese

ist

Antwort

5

Sie haben auf diesem von einem Baum Perspektive zu betrachten. Um zu einer Aktion zu gelangen, müssen Sie zunächst zu einem Controller gelangen. In diesem Fall haben Sie den Controller auf die Gruppe "Editors" beschränkt, sodass die Viewer nicht einmal so weit kommen. Am wahrscheinlichsten wäre es, den Controller auf Viewers, Editors zu beschränken und dann in den Aktionen, für die nur die Berechtigung Editor erforderlich ist, diese anzugeben. Dies erzeugt redundante Attribute, berücksichtigt jedoch die Codekosten, wenn Sie jede Aktion basierend auf der Rollenmitgliedschaft manuell einschränken mussten.

[Authorize(Roles = "Viewers, Editors")] 
public class BaseController : Controller 
{ 

    [Authorize(Roles = "Editors")] 
    public ActionResult EditReport(PaymentsUnallocatedAndQueriedModel model) 
    { 
     // Some editor only functionality 
    } 

    public ActionResult Report(PaymentsUnallocatedAndQueriedModel model) 
    { 
     // Some functionality for both. No attribute needed 
    } 
} 
+0

Danke für deine Antwort, hatte gehofft, dass ich nicht auf der Oberseite jeder Aktion autorisieren zu wiederholen, weil Redakteure alle Aktionen zugreifen können, aber es scheint, dass es – Elham

+0

@Elham keine andere Möglichkeit sind: Sie könnten immer an dieser SO aussehen hinterfragen und implementieren Sie ein Attribut verweigern. Dies scheint eine Menge Arbeit zu sein, nur weil Sie kein Attribut für eine Methode eingeben möchten. http://stackoverflow.com/questions/4011458/mvc-authorize-attribute-deny –