2016-07-08 5 views
1

Also im Grunde habe ich eine einzelne Seite Anwendung mit Angular, die mit ASP.NET MVC zusammenarbeitet. Ich habe einen Controller, der nur teilweise Ansichten hat und ich möchte, dass der Benutzer nicht auf sie zugreifen kann.Hide Teilansichten von Benutzern, aber machen Sie sie für AJAX

Normalerweise würde ich dafür [ChildActionOnly] verwenden, aber ich rufe meine MVC Partials nicht aus der Sicht, sondern aus AJAX (ich mache das sowohl mit jQuery als auch eckig in verschiedenen Teilen der App).

Gibt es eine Möglichkeit, den Benutzer daran zu hindern, auf meine Teiltage zuzugreifen, und Ajax trotzdem zu lassen, wenn er auf Links klickt?

Danke,

Antwort

2

Obwohl es klingt out of the Box, um dies mit einem AuthorizationAttribute umgehen, Sie es vorstellbar tun.

public class AjaxOnlyAuthorization : AuthorizeAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (filterContext.HttpContext.Request.IsAjaxRequest()) 
     { 
      base.OnAuthorization(filterContext); 
     } 
     else 
     { 
      //..No Go 
     } 
    } 
} 

Und dann ....

[AjaxOnlyAuthorization] 
public MyAjaxOnlyClass 
{ 
} 

Es ist probally geeignetere ein ActionFilterAttribute statt, weil das Antwortformat wenig mit Genehmigung zu tun hat, zu verwenden.

public class AjaxOnlyFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     ...  
    } 
} 
+0

Angesichts der Art und Weise, wie ich Authentifizierung verwende, glaube ich, dass dies meine bevorzugte Vorgehensweise für jetzt sein könnte. Wenn meine Anwendung Identität in ihrer Fülle Rollen verwendet würde jedoch bevorzugt werden. Vielen Dank! –

+1

Siehe meinen Kommentar. Das ActionFilterAttribute ist möglicherweise besser geeignet. –

+0

Nach ein paar Versuchen scheint es, dass es nie die Basis trifft. OnActionExecuting (filterContext); Rufen Sie an, unabhängig davon, ob Sie die URL oder das angular gebundene Navigationsgerät verwenden, das diese Aktion aufruft. Gibt es einen Hinweis darauf, was IsAjaxRequest darunter tut? –

1

Haben Sie versucht, die Daten Annotation Authorize? Sie können die „Admin“ natürlich ändern, um jede Gruppe oder einen Benutzer, oder einfach, um es ohne Benutzer oder Rollen verwenden:

[Authorize(Roles = "Admin")] 

Sie diese oberhalb der Klasse nur hinzufügen oder über jede Aktion, die Sie einschränken möchten

Sie können natürlich Sie nur [autorisieren] oberhalb der Klassendeklaration sicher zu machen hat eingeloggt sein, und dann tun Sie es genauer auf jede Aktion, indem er erklärt, die die Aktionen verwenden autorisiert ist

+0

Die Sache mit meiner App ist, dass ich nicht alles was Identität bietet. Ich habe meine eigene Authentifizierung implementiert, um mit dem Autorize-Attribut zu arbeiten, was bedeutet, dass ich keine Rollen konfiguriert habe. Ich kann eine "Entwickler" -Rolle konfigurieren und sie so verwenden. –

Verwandte Themen