2013-06-15 13 views
7

Wenn ich eine JavaScript-Front-End-Anwendung habe, was ist die beste/gängige Praxis, um Berechtigungen/ACL zu behandeln. Zum Beispiel möchte ich einige Elemente anzeigen/verstecken. Natürlich ist es nicht sicher, aber immer noch auf der Ansichtsebene, wie kann ich das kontrollieren.Berechtigungen/ACL in einer JavaScript-Client-Seite App

ich Backbone.js bin mit (mit Marionette) als Client-Seite Rahmen, jQuery so verwenden, Unterstrichen usw.

ich auf dem hohen Niveau denke, kann ich zu deaktivieren, um irgendwie einige Routen versuchen. Braucht etwas Forschung, aber ich könnte Router.on("route", checkPermissions) tun.

Dann auf der Ansichtsebene, um Elemente zu verstecken/zu zeigen, ... immer noch nicht sicher, wie man das am besten anstellt. Ich brauche in einer einigen Berechtigungen in das Modell Objekt zu übergeben ...

Antwort

1

Ich würde benutzerdefinierte BaseModel/BaseCollection Klassen mit geänderter Syntaxanalyse erstellen, die nicht zugängliche Attribute aus der Datenschicht entfernen würde. Später könnten Sie diese Datenverdeckungslogik transparent auf die Serverseite übertragen und produktionsbewährte Sicherheit erhalten.

Wie bei den Berechtigungsdaten ist das Attribut _security für Modell-/Auflistungsklassen ein guter Ort, um es zu deklarieren.

In Ansichten, verwenden Sie bedingte Logik als akoskm vorgeschlagen

+1

sensible Datenattribute Parsing aus auf der Client-Seite ist eine schlechte Idee. Sensible Daten sollten den Server niemals verlassen, wenn der Benutzer keine Erlaubnis hat, sie zu sehen. –

6

Um Elemente versteckt/auf dem Bildschirm sichtbar machen kann ich Inline-Kontrollen in meiner Vorlage, so etwas wie:

<% if (user.isInRole('ADMIN', 'MNGR')) { %> 
    <li <% page == "store" ? print('class="active"') :'' %>> 
    </li> 
<% } %> 

und addierte den folgenden Helferfunktion in meinem Benutzermodell für die Berechtigungen zu überprüfen:

isInRole: function (rr) { 
    var self = this; 
    $.each(rr, function(i) { 
     if (rr[i] === self.currentRole) { 
      alert('pass'); 
     } 
    }); 
} 

ich nehme an, das ist sicher-genug, da die eigentliche Prüfung für erforderliche Berechtigung auf der Serverseite wieder passiert. Indem ich einige Steuerelemente verberge, führe ich den Benutzer einfach durch die Anwendung und lasse ihn nicht mit Aktionen für ihn verwirren, weil er/sie nicht die erforderlichen Privilegien hat.

Mit diesem Ansatz bin ich nie Verstecken von Daten, die dynamisch durch die REST-Dienste kommt, nur statische Element der Seite.