2016-04-22 14 views
3

Ich fragte a similar question, wo die Antwort war, dass ich dies überhaupt nicht tun muss. Während dies für diesen Ansatz richtig war, hilft mir das hier nicht weiter.Exchange-Eigenschaften zwischen Aktionen im Controller

Ich habe die folgende Aktion:

[MyCaching] 
[MyUserAuth] 
public class MyMagicController:Controller { 
    public ActionResult GetLoans() { 
     return GetLoansForThisUser(); 
    } 
} 

MyUserAuth ist ein Attribut, das überprüft, ob der Benutzer die Berechtigungen hat, die Daten zu erhalten. Diese Information wird von einem DB abgerufen und kann nicht (rein) durch den HttpContext abgerufen werden. Ein paar Benutzer sind Administratoren, die ein bisschen mehr sehen sollten.

Wenn der Benutzer normalen Zugriff hat (wie 90% der Benutzer), sollten die Caching-Mechanismen im [MyCaching] - Attribut starten und der Inhalt sollte aus dem Cache zurückgegeben werden.

Wenn es sich um einen Administrator handelt, sollte der Cache nicht zurückgegeben und nicht ausgefüllt werden, da der Inhalt unterschiedlich ist.

Also muss ich einen Weg für die [MyUserAuth] finden, die [MyCaching] diese Information zu erzählen. Gibt es einen direkten Weg, dies zu erreichen? Wenn nicht, kann ich die HttpContext dafür "missbrauchen"? Z.B .:

public class MyAuthAttribute:AuthenticationAttribute 
    // ... 
    public void CheckPermissions(HttpContext context) { 
     context.Items.Add("isAdmin",true); 
    } 
} 

public class MyCachingAttribute:ActionAttribute { 
    // ... 
    public void GetCache(HttpContext context) { 
     if (context.Items["isAdmin"]) { 
      return // dontcache; 
     } 
    } 
} 

Und dann MyUserAuth setzen kurz vor MyCaching?

+1

, warum Sie können nicht festgelegt, eine Rolle/claim isAdmin auf Authentifizierung überprüfen könnte? Sie können es dann in MyCaching überprüfen – Bombinosh

Antwort

0

Sie könnten eine Rolle oder einen Anspruch ‚isAdmin‘ auf Authentifizierung festgelegt, die Sie in MyCaching, durch die Httpcontext

Verwandte Themen