IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AngularJS Discussion :

Rôle utilisateur, afficher/cacher menu, rafraîchissement page


Sujet :

AngularJS

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 40
    Points : 29
    Points
    29
    Par défaut Rôle utilisateur, afficher/cacher menu, rafraîchissement page
    Bonjour,

    actuellement j'ai une application qui possède 3 types d'utilisateurs différents, je souhaite afficher un menu particulier a chacun d'eux et bloquer certaines pages de ce fait.

    Pour l'instant je procède ainsi:

    Service de connexion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    auth.$onAuth(function(authData) {
     
    		if(authData) {      
          angular.copy(authData, Auth.user);
          Auth.user.profile = $firebaseObject(ref.child('profileExt').child(authData.uid));
     
    		}
    Ici je stocke les infos de profile dans un object firebase.
    Ces informations sont disponible tout au long de la navigation de l'utilisateurs, tant qu'il ne détruit pas sa "session".

    A chaque changement de route je demande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     .when('/activite-en-cours/:aid', {
            templateUrl: 'views/activite-en-cours.html',
            controller: 'EncoursCtrl',
            resolve: {
              currentAuth: function(Auth) {
                return Auth.requireAuth();
              }
            }
          })
    Qui correspond a:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     requireAuth: function() {
          return auth.$requireAuth();
        }
    Dans mon menu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      $scope.status=Auth.user.profile.status;
    Je récupère dans le scope le status de l'utilisateur actuel (je devrais d'ailleurs voir pour récupérer avec une promise cette information), pour ensuite filtre dans mon html avec des ng-if
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <li ng-if="status==='Prestataire'"><a href="#/message">Message</a></li>
    Le soucis c'est le rafraîchissement des pages, si l'utilisateur fait un F5, alors l'application perd le status et n'affiche plus le bon menu.
    Comment faire pour faire un système propre, permettant le bocage de certaines pages, et l'affichage du menu personnalisé.

    Merci

  2. #2
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Bonjour,

    Bon... il y a plusieurs écoles...
    Je pense que si une application propose plusieurs profils, c'est au niveau du serveur qu'il faut gérer cela.
    Parce que sur ton application, si tu fais un ng-if, l'utilisateur peut voir le code et le modifier... Du coup, il pourrait accéder à d'autres profils que le sien. Et cela, même si ton élément est supprimé du DOM avec le ng-if. Surtout si c'est des fonctions dans ton contrôleur qui testent la valeur passée au ng-if : <div ng-if="menuProcess()">ou pas... on peut même imaginer ça : <div ng-if="profil1">.
    Avec la fonction, un petit F12 en debug et je vois tous les tests que tu fais pour afficher tel ou tel menu (c'est encore plus facile avec un switch dans cette fonction). Du coup je connais tous les libellés des profils et ça, c'est pas bon.

    Je travaille sur une application en NodeJS et AngularJS. Dans NodeJS, j'ai un répertoire server/ et public/. J'ai mis tous les fichiers html dans un rep dans server/views. Et c'est le serveur qui "envoie" les fichiers html. Ils ne sont pas tous accessibles par le client (depuis le rép public/views, d'ailleurs, il n'y en a pas).
    Par exemple, le client peut demander l'url suivante : maFonctionnalite/mapage1.html. Sur le serveur, pour le template maFonctionnalite/:partial, où :partial est un fichier HTML, envoyer server/views/blabla/blabla/maFonctionnalite1/:partial.
    Là, la logique du choix du fichier à envoyer est faite au niveau du serveur. Et comme chaque demande au serveur est accompagnée d'un token jwt (construit initialement avec l'id de l'utilisateur une fois qu'il s'authentifie), je sais de quel profil il s'agit...

    Voila pour ma solution... J'ai l'impression que ma réponse est un peu compliquée ?
    Quel techno utilises-tu côté serveur ?
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    Effectivement, un peu compliqué a la première lecture ^^

    Pour résumer mon fonctionnement:

    - 1 appli mobile généré avec cordova (node,grunt,bower), qui affiche des résultats (en gros)
    - 1 site web qui est une réplique de l'application ci dessus. (hébergement web)
    - 1 site web qui crée les données pour le site et l'appli' citée précédemment.(hébergement web)

    Tout ceci en HTML + AngularJS

    J'ai besoin de savoir les rôles sur le dernier site web, ou je vais crée les données.
    Un utilisateur pourra être soit un "prestataire" soit une "structure", et il y a aussi le rôle "admin" évidemment.

    Pour la base de données, firebase.

  4. #4
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Je ne connais pas firebase, et à première vue, elle peut exposer des WS directement que tu consomme par ton app cliente (AngularJS).
    Je pense que ne pas avoir de serveur pour une appli pro est un peu risqué...
    et si je comprends bien, la troisième appli fait office de "serveur" ? Dans ce cas pourquoi ne pas utiliser un "vrai" serveur ?
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  5. #5
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Dans ton cas, je stockerais les informations de l'utilisateur authentifié dans le localStorage (ou un cookie) et je créerais ausi un menu par défaut. Comme cela, même si tu appuie sur F5, tu aura toujours ton utilisateur authentifié.
    Et donc, si j'ai un utilisateur authentifié dans le localstorage, je consulte son profil et j'affiche le menu adéquat, sinon j'affiche le menu par défaut (et je le dis à l'utilisateur).
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    Merci pour ces précisions!
    J'essai donc avec le localStorage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    	auth.$onAuth(function(authData) {
     
    		if(authData) {      
          angular.copy(authData, Auth.user);
          Auth.user.profile = $firebaseObject(ref.child('profileExt').child(authData.uid));
          var user = angular.toJson(Auth.user.profile);
          console.log(user);
          localStorage.setItem('profile', user);
     
    		} 
    	});
    Le console.log me renvoi cependant seulement : {"$id":"simplelogin:91","$priority":null}

    Alors que si je ne convertit pas en Json (aut.user.profile) j'ai alors accés a toutes mes données :
    $$conf: Object$id: "simplelogin:91"$priority: nullbloque: "1"date: "1992-01-15T23:00:00.000Z"email: "presta@presta.fr"lastname: "presta"nom: "presta"pseudo: "presta"role: "1"status: "Prestataire"

    Pour récuperer le local storage je pense faire ceci(dans mon controller de menu) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $scope.status = localStorage.getItem('profile');

  7. #7
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Ce n'est pas la peine de convertir l'objet que tu reçois en JSON.
    Stocke le directement dans le localStorage et quand tu veux le récupérer, fait un get sans conversion.
    Si tu veux l'afficher dans un console.log, fais un JSON.stringify();
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2012
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2012
    Messages : 40
    Points : 29
    Points
    29
    Par défaut
    Alors je sais pas si ca vient du fait que c'est un objet firebase:
    En json:
    Sans json:
    ^^#

  9. #9
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Citation Envoyé par rioll Voir le message
    Le soucis c'est le rafraîchissement des pages, si l'utilisateur fait un F5, alors l'application perd le status et n'affiche plus le bon menu.
    Comment faire pour faire un système propre, permettant le bocage de certaines pages, et l'affichage du menu personnalisé.
    C'est normal. Une webapp angular est une Single Page Application. Faire un F5 sur une SPA ça équivaut à fermer un logiciel et à le ré-ouvrir.

    La question n'est pas de savoir comment garder techniquement l'utilisateur connecté mais de savoir si ton application doit offrir un mécanisme de session.

    C'est un problème qui a une origine fonctionnelle. Il faut déterminer en premier lieu dans quelle mesure ton application doit supporter un mécanisme de session (donc il faut voir ça avec la MOA ou le client).

    Le mécanisme de session doit ensuite être implémenté côté serveur.

    Ensuite tu pourras te poser les questions de comment implémenter ce qui manque sur le client, mais cela vient en tout dernier.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  10. #10
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Citation Envoyé par slim Voir le message
    Je travaille sur une application en NodeJS et AngularJS. Dans NodeJS, j'ai un répertoire server/ et public/. J'ai mis tous les fichiers html dans un rep dans server/views. Et c'est le serveur qui "envoie" les fichiers html. Ils ne sont pas tous accessibles par le client (depuis le rép public/views, d'ailleurs, il n'y en a pas).
    Par exemple, le client peut demander l'url suivante : maFonctionnalite/mapage1.html. Sur le serveur, pour le template maFonctionnalite/:partial, où :partial est un fichier HTML, envoyer server/views/blabla/blabla/maFonctionnalite1/:partial.
    Là, la logique du choix du fichier à envoyer est faite au niveau du serveur. Et comme chaque demande au serveur est accompagnée d'un token jwt (construit initialement avec l'id de l'utilisateur une fois qu'il s'authentifie), je sais de quel profil il s'agit...

    Voila pour ma solution... J'ai l'impression que ma réponse est un peu compliquée ?
    Quel techno utilises-tu côté serveur ?
    En gros tu as mis en place un mécanisme pour empêcher l'application de télécharger un template si l'utilisateur logué n'a pas les droits pour accéder à cette partie de l'application ?

    Je trouve que c'est un peu too much. Que ton serveur n'envoie pas de données confidentielles ça c'est normal, que ton client empêche d'accéder à une page pour laquelle l'utilisateur n'a pas les droits c'est normal aussi mais empêcher un pirate d'accéder aux templates (qui ne contiennent aucune données par définition) je ne vois vraiment pas l'intérêt !
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  11. #11
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Citation Envoyé par Marco46 Voir le message
    Je trouve que c'est un peu too much.
    Pour une application simple, je suis d'accord. Mais je dirais que cela dépend du besoin fonctionnel...
    Pour certains rôles, j'affiche des templates contenant certains attributs (propriétés d'objets stockés en base et renvoyés par le serveur) que des utilisateurs ayant un autre profil ne doivent pas connaitre. Tout simplement.
    C'est une appli de gestion d'écoles. Un utilisateur ayant le rôle 'Direction', dispose d'informations sur les élèves (santé, moyens financiers des parents pour exonération etc. En sachant que dans un ménage avec des enfants, il y a d'inombrables cas, problèmes etc.) que les parents fournissent mais j'ai pas envie qu'un élève qui s'y connait aille fouiner dans mon code... et sache quels types d'infos sont traitées (je ne parle même pas des infos elles mêmes, enfin, je me comprends ).

    Ceci est valable pour les applications financières aussi (octroiement de crédits...). On Peut imaginer plusieurs domaines d'application comme ceux-ci.
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

  12. #12
    Expert éminent sénior
    Avatar de Marco46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2005
    Messages : 4 413
    Points : 19 609
    Points
    19 609
    Par défaut
    Tu veux dire que dans ton cas la nature des données traitées est confidentielle ?

    Ah bah alors oui dans ce cas c'est pas too much.
    Un problème avec Git ? Essayez la FAQ, sinon posez votre question sur le forum.



    "Toute personne croyant qu'une croissance exponentielle peut durer indéfiniment dans un monde fini est soit un fou, soit un économiste."
    Kenneth E. Boulding

    "Les richesses naturelles sont inépuisables, car, sans cela, nous ne les obtiendrions pas gratuitement. Ne pouvant être ni multipliées ni épuisées, elles ne sont pas l’objet des sciences économiques."
    Jean-Baptiste Say, Traité d'économie politique, 1803.

    "/home/earth is 102% full ... please delete anyone you can."
    Inconnu

  13. #13
    Membre expérimenté Avatar de slim
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2002
    Messages
    938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2002
    Messages : 938
    Points : 1 337
    Points
    1 337
    Par défaut
    Citation Envoyé par Marco46 Voir le message
    Tu veux dire que dans ton cas la nature des données traitées est confidentielle ?
    Tout à fait. C'est vrai que je m'étale un peu !
    Faites une recherche sur le forum et/ou sur internet et lisez la doc officielle avant de poser une question svp.
    et n'oubliez pas de lire les FAQ !
    FAQ Java et les cours et tutoriels Java
    Doc JAVA officielle
    AngularJS 1.x
    Angular 2

    Do it simple... and RTFM !

Discussions similaires

  1. Afficher/Cacher menu avec slideToggle
    Par Digilougm dans le forum jQuery
    Réponses: 2
    Dernier message: 24/10/2010, 21h42
  2. Afficher le menu SiteMap par utilisateur
    Par jpelaho dans le forum ASP.NET
    Réponses: 6
    Dernier message: 29/05/2009, 12h14
  3. Comment afficher/cacher un menu avec balises ul et li?
    Par Jim_Nastiq dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 16/03/2007, 10h07
  4. Afficher/Cacher une partie d'une page
    Par frechy dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 12/01/2006, 14h18
  5. Afficher/Cacher un sous menu au clic
    Par Toutankharton dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 28/09/2005, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo