6

Ich habe ein Problem mit der Implementierung von Routenbeschränkungen aufgrund von Remote-Daten, die vom Server abgerufen wurden.AngularJs und Angular-UI-Router Routenberechtigungen

Angenommen, ich habe die folgende Konfigurationsdatei:

angular.module('myApp') 
    .config(['$stateProvider', function($stateProvider) { 

    $stateProvider 
     .state('post', { 
     url: '/post/:post_id', 
     abstract: true, 
     [...] 
    }) 
     .state('post.view', { 
     url: '/view' 
     [...] 
    }) 
     .state('post.edit', { 
     url: '/edit' 
     [...] 
    }) 

}]); 

Die Anforderungen für meine Anwendung sind:

  • Ein Post hat einen Besitzer (Konzept der Post) und seine Domäne kann öffentlich sein oder privat.

  • Wenn die Domäne öffentlich ist, kann jeder Benutzer den Beitrag sehen (Eingabe des Status post.view), und wenn nicht (Domäne ist privat), kann nur der Eigentümer sie sehen.

  • Der Status post.edit ist nur für den Eigentümer zugänglich.

Um dies zu tun, was ist der beste Ansatz?

Ich dachte daran, eine Entschlossenheit zu haben, die die Daten vom Server holt (die Domänen- und Korrespondent-Benutzerrolle des Posts), die erforderlichen Prüfungen durchführt und entsprechend zurückgibt (Versprechen aufgelöst oder zurückgewiesen).

Aber wie würde ich dann den Benutzer in einen korrekten Status umleiten, wenn er nicht autorisiert ist? Beispielsweise sollte ein normaler Benutzer, der versucht, auf den Status post.edit zuzugreifen, an den Status post.view umgeleitet werden, wenn die Domäne des Beitrags öffentlich ist ... Wenn die Domäne des Beitrags jedoch privat ist, sollte eine Seite für den nicht autorisierten Zugriff angezeigt werden. Ist es ein guter Ansatz, dies direkt auf der Lösung zu tun? Was sind die Alternativen?

Antwort

5

Werfen Sie einen Blick auf diese tolle Anleitung auf Genehmigung Routing auf Basis von Rollen:

role based authorization

auch einen Blick auf diese Stackoverflow Antwort haben, hier ist ein bedingtes Routing auf Login basiert, können Sie das gleiche verwenden können Logik der Rollen für Ihren Zweck,

Ui-router, routes based on permission

+0

Vielen Dank! Die Tutorials haben mir wirklich geholfen, etwas zum Laufen zu bringen! Aber jetzt habe ich ein anderes Problem ... Ich bin in der Lage, den Benutzer entsprechend umzuleiten, aber jedes Mal, wenn eine Weiterleitung stattfindet, gibt es eine Art von Flackern (und einige Vorlagen werden geladen, von den nicht autorisierten Staaten)! –

+0

Sie können das Flackern vermeiden, indem Sie ein Overlay mit Ladesymbolen anzeigen. –

+0

Das Hinzufügen eines Overlays mit Ladesymbolen befindet sich in der 'To-do-Liste' :) Ich habe es geschafft, etwas Flackern mit 'event.preventDefault()' loszuwerden. –