3 votes

Authentification, pushstate et routage en Ember.js

Je me demande si quelqu'un a des idées sur Ember.js en conjonction avec le routage et le pushstate.

L'exemple typique d'Ember pour l'authentification est le suivant :

aStateManager = Em.StateManager.create({
    initialState: 'unauthenticated',
    authenticated: Em.State.create({}),
    unauthenticated: Em.State.create({
      authenticate: function(stateManager, context){
        stateManager.goToState('authenticated')
      }
    })
  })

  aStateManager.send('authenticate')

Cela fonctionnera si un utilisateur est toujours envoyé vers l'url racine. Mais si l'utilisateur tape l'url dans la barre d'adresse comme '/api/resource/1', y a-t-il un moyen de dire si l'utilisateur est authentifié ou non dans chaque état ?

Je suppose que ce que je cherche est un rail comme before_filter.

Quelqu'un a-t-il trouvé une solution pour ce scénario courant ?

1voto

Gaurav Shetty Points 461

Le problème auquel nous allons être confrontés avec toute sorte d'authentification est que l'utilisateur a un accès complet à tous les modèles et peut modifier les données qu'ils contiennent et se donner des autorisations qu'il n'avait pas auparavant. Et contacter le serveur à chaque fois serait une plaie.

Une solution qui me vient à l'esprit est d'utiliser le mixin freezable et l'indicateur isDirty des objets. Nous pouvons avoir les permissions d'un utilisateur en tant que modèle DS (si nous utilisons ember data) et ensuite le définir comme gelé. Maintenant, nous créons un mixin de vérification des permissions qui vérifie si le modèle est sale (c'est-à-dire qu'il a été modifié). Et aussi respecter le statut gelé dans toutes les autres parties du code.

Bien sûr, je n'ai pas pensé à d'autres cas d'utilisation, mais cela devrait constituer un bon point de départ.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X