2013-06-15 18 views
7

Se si dispone di un'applicazione front-end JavaScript, qual è la prassi migliore/comune per gestire le autorizzazioni/ACL. Ad esempio, voglio mostrare/nascondere alcuni elementi, ecc. Naturalmente, non è sicuro, ma ancora sul livello vista, come posso controllarlo.Autorizzazioni/ACL in un'app lato client JavaScript

Sto usando BackboneJS (con Marionette) come un quadro lato client, in modo da utilizzare jQuery, Underscore ecc

Sto pensando al alto livello, posso provare a disattivare in qualche modo alcune rotte. Ho bisogno di qualche ricerca ma potrei fare Router.on("route", checkPermissions).

Quindi sul livello vista, per nascondere/mostrare gli elementi, ... ancora non sono sicuro di come gestirlo al meglio. Ho bisogno di passare in alcune autorizzazioni oggetto nel modello ...

risposta

1

Vorrei creare classi personalizzate BaseModel/BaseCollection con logica di analisi modificata che rimuova gli attributi non accessibili dal livello dati. In seguito, sarebbe possibile trasferire questa logica di occultamento dei dati sul lato server in modo trasparente e ottenere sicurezza nella produzione.

Per quanto riguarda i dati sui permessi, l'attributo _security sulle classi Modello/Collezione sarebbe un buon posto per dichiararlo.

In vista, utilizzare la logica condizionale come akoskm suggerito

+1

Analisi fuori gli attributi dei dati sensibili sul lato client è una cattiva idea. I dati sensibili non dovrebbero mai lasciare il server se l'utente non ha il permesso di vederlo. –

6

Per rendere elementi nascosti/visibile sullo schermo che faccio controlli in linea nel mio modello, qualcosa di simile a:

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

e ha aggiunto il seguente funzione di supporto all'interno del mio modello di utente per controllare i permessi:

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

Suppongo che questo sia sicuro-sufficiente, dal momento che il controllo effettivo per il permesso richiesto accade di nuovo sul lato server. Nascondendo alcuni controlli sto solo guidando l'utente attraverso l'applicazione e non lasciandolo confuso con azioni per lui/lei non ha i privilegi richiesti.

Con tale approccio, sono mai nascondere i dati che passano dinamicamente dai servizi REST, solo elementi statici della pagina.