2016-04-30 7 views
0

In meiner angularjs App habe ich Route /#/tasks, die Aufgaben von /tasks URL abrufen. Wenn der Benutzer manuell auf /tasks url geht, erhält er JSON-Daten. Sollte ich verhindern, dass JSON-Daten dem Benutzer angezeigt werden? Was ist die beste Praxis? Zum Beispiel kann ich im Backend überprüfen, ob die Anfrage Ajax ist oder nicht. Wenn nicht - Weiterleitung an Basis-URL. Backend - laravel 5.Angularjs route: Verhindern, dass Benutzer json Daten manuell erhalten

Antwort

1

Aus dem Titel des Beitrags mit den Schlüsselwörtern "Benutzer verhindern" scheint es, dass Sie eine Art von Logik benötigen, um Zugriffsrechte für einen bestimmten Benutzer zu definieren.

könnten Sie halten die Berechtigungslogik vor ein Benutzer immer Zugriff auf eine Route zu lösen. Hierzu können Sie die $routeProviderresolve Eigenschaft der .when() Methode nutzen.

Gemäß der docs die resolve Eigenschaft ...

Eine optionale Karte von Abhängigkeiten, die in die Steuerung eingespritzt werden soll. Wenn eine dieser Abhängigkeiten verspricht, wartet der Router darauf, dass sie alle aufgelöst werden oder dass einer zurückgewiesen wird, bevor der Controller instanziiert wird.

Wenn alle Versprechen erfolgreich gelöst wurden, werden die Werte der aufgelösten Versprechen eingegeben, und das $ routeChangeSuccess-Ereignis wird ausgelöst. Wenn eines der Versprechen abgelehnt wird, wird das $ routeChangeError-Ereignis ausgelöst.

Die Entschlossenheit nimmt in Funktionen (als injizierbare Abhängigkeiten), von denen jeder zurückkehren kann ein Versprechen, und wenn eine der Versprechungen abgelehnt bekommen, wie zitiert, wird ein Fehler geworfen und buchstäblich weder die Strecke noch Die Ansicht ist geladen.

Damit die Berechtigungslogik funktioniert, müssen Sie einen API-Aufruf an eine Backend-Funktion/einen Back-End-Dienst ausführen, der entweder den Benutzer für die Route erlaubt oder seine Anfrage ablehnt.

.when('/tasks', { 
resolve: { 
    authorize: function(authService){ 
      //some api call to get either acceptance (e.g. status code 200) or rejection (status code 500) for the user being authorized 
      return authService.authorize(); 
     } 
    }, 
    controller: function(){ 
     //route controller logic 
    } 
}) 

Alternativ, wenn Sie auch etwas bei Ausfall der Versprechen erfüllen würden wollen, können Sie dies tun, indem einfach das Versprechen mit einem catch() Handler Verkettungs und werfen einen Fehler mit Nachdruck das Versprechen ablehnen, die von zurückgegeben die catch() selbst.

.when('/tasks', { 
resolve: { 
    authorize: function($location, authService){ 
     //some api call to get either acceptance or rejection for the user being 
     return authService.authorize() 
      .then(function(){ 
       //some logic on success of the promise 
      }) 
      .catch(function(){ 
       $location.path('/auth/login/'); 
       throw 'Authorization error'; 
      }); 
     } 
    }, 
    controller: function(){ 
     //route controller logic 
    } 
}) 
Verwandte Themen