2016-07-25 7 views
0

Hinweis: Nicht sicher, ob das Folgende der richtige Weg ist, um das zu tun, was ich will.Modell automatisch bei jeder Anfrage laden

Hintergrund: Ich habe ein Forum (php) und ich erstelle eine asp.net MVC Web-Anwendung, die eine Art von dem Forum unabhängig ist, mit Ausnahme der Login-Daten. Der Benutzer registriert und loggt sich über das Forum, aber die App muss den Anmeldestatus überprüfen, indem er den Sitzungshash aus dem Cookie liest und ihn mit der Datenbank der eingeloggten Benutzer des Forums vergleicht.

Ziel: Ich schließe meine UserModel-Klasse bei jeder Anfrage ein, um zu sehen, ob der Benutzer bestimmte Berechtigungen hat, um das zu tun, was er tun möchte. Auch für meine Ansichten, um Benutzerbezogene Daten anzuzeigen.

Muss ich so etwas zu jeder Aktion eines Controllers in meiner Anwendung hinzufügen?

public ActionResult Index() 
    { 
     UserRepository userRep = new UserRepository(); 
     UserModel user = userRep.GetUserBySession(Request.Cookies["userHash"].Value); 

     //do stuff with user 
     ... 

     return View(myViewModel); 
    } 

Antwort

0

Betrachten Sie ValidationAttribute. Sie können Ihre eigene Rolle, und Ihre eigene Logik darin:

public class CustomAttribute : ValidationAttribute 
{ 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     UserRepository userRep = new UserRepository(); 
     UserModel user = userRep.GetUserBySession(Request.Cookies["userHash"].Value); 

     if (user == null) { 
      // Redirect to login? 
     } 
    } 
} 

Dann können Sie Ihre Methoden wie diese dekorieren:

[CustomAttribute] 
public ActionResult Index() 

Oder wenn Sie es HTTP zu jedem benötigen werden anzuwenden Methode in Ihrer Klasse, können Sie es auf Klassenebene dekorieren:

+0

Danke, Schnitt kann ich dann 'UserModel Benutzer' innerhalb der eingerichteten Methoden zugreifen? Oder muss ich es noch "manuell" laden? – Cornwell

+0

@Cornwell Sie würden es immer noch manuell laden, aber keinen Grund, warum Sie keinen Benutzerdienst erstellen und eine Methode aufrufen können, die den Benutzer zurückgibt, so dass Sie den gleichen Code nicht wiederholen müssen – ediblecode

Verwandte Themen