2016-10-28 18 views
0

Ich versuche, eine benutzerdefinierte Autorisieren-Attribut zu erstellen, Folgendes zu tun:Erstellen einer benutzerdefinierten Autorisieren mit spezifischen Regeln Attribut

  1. Wenn der Benutzer eine Rolle „Regelmäßige Nutzer“ hat - er/Index umgeleitet wird/
  2. Alle anderen Benutzer (Administrator, Teilnehmer) wird zu/Search/Index

Dies ist der Zugang zu abonnieren, wenn der Benutzer die Such Controller zu öffnen versucht. Ich habe die Gewohnheit Autorisieren wie dieses Attribut:

public class DenyRegularUser : System.Web.Mvc.AuthorizeAttribute 
    { 
     public override void OnAuthorization(AuthorizationContext filterContext) 
     { 
      base.OnAuthorization(filterContext); 
      if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
      { 
       filterContext.Result = new RedirectResult("~/User/Logon"); 
       return; 
      } 

      if (filterContext.HttpContext.User.IsInRole("Regular user")) 
      { 
       filterContext.Result = new RedirectResult("~/Index/Subscribe"); 
      } 
     } 
    } 

Und das ist meine Suche Controller:

namespace WebApplication2.Controllers 
{ 
    [DenyRegularUser(Roles ="Regular user")] 
    public class SearchController : Controller 
    { 
     // GET: Search 
     public ActionResult Index() 
     { 
      return View(); 
     } 
    } 
} 

Aber aus irgendeinem Grunde, auch wenn ich ein Update der Rolle des Benutzers von normalen Benutzern Administrator oder Abonnenten, ich werde umgeleitet zur Login-Seite:/user/login ...

Dies sollte nicht passieren, da die Login-Funktionalität perfekt funktioniert und ich erhalte die Rolle des Benutzers ...

Was verpasse ich hier?

+0

Sind die Benutzer "Admin"/"Subscriber", die Sie versuchen, auch ein Teil der Gruppe "Regular user"? – krillgar

Antwort

0

Dies kann helfen.

Ich glaube, die IsAuthorized-Methode ist die richtige Methode, um das AuthorizeAttribute zu überschreiben.

Verwandte Themen