2013-06-15 4 views
7

Si j'ai une application frontale JavaScript, quelle est la meilleure pratique/commune pour gérer les autorisations/ACL. Par exemple, je veux montrer/cacher certains éléments etc. Bien sûr, ce n'est pas sécurisé, mais toujours sur la couche de vue, comment puis-je contrôler cela.Autorisations/ACL dans une application côté client JavaScript

J'utilise backbone.js (avec Marionette) en tant que cadre côté client, donc en utilisant jQuery, etc. Souligné

Je pense au haut niveau, je peux essayer de désactiver certaines routes en quelque sorte. Besoin de recherches, mais je pourrais faire Router.on("route", checkPermissions). Puis, sur le calque de vue, pour masquer/afficher les éléments, ... je ne sais toujours pas comment le gérer. Je dois passer dans un objet des autorisations dans le modèle ...

Répondre

1

Je créerais des classes personnalisées BaseModel/BaseCollection avec une logique d'analyse modifiée qui supprimerait les attributs inaccessibles de la couche de données. Plus tard, vous serez en mesure de transférer cette logique de dissimulation de données vers le côté serveur de manière transparente et d'obtenir une sécurité digne de production. En ce qui concerne les données d'autorisation, l'attribut _security sur les classes Model/Collection serait un bon endroit pour le déclarer.

Dans les vues, utiliser la logique conditionnelle akoskm a suggéré

+1

Parsing des attributs de données sensibles sur le côté client est une mauvaise idée. Les données sensibles ne doivent jamais quitter le serveur si l'utilisateur n'a pas l'autorisation de le voir. –

6

Pour faire des éléments cachés/visible à l'écran je vérifie en ligne dans mon modèle, quelque chose comme:

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

et ajouté ce qui suit fonction d'aide dans mon modèle utilisateur pour vérifier les autorisations:

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

Je suppose que cela est sécurisé-suffisant, car le contrôle réel de l'autorisation requise se produit de nouveau du côté du serveur. En masquant certains contrôles, je guide l'utilisateur à travers l'application et je ne le laisse pas le confondre avec des actions car il/elle n'a pas les privilèges requis.

Avec une telle approche, je suis jamais cachant des données qui vient dynamiquement à travers les services REST, seul élément statique de la page.

Questions connexes