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

MkFramework Discussion :

Module d'authentification et pages publiques


Sujet :

MkFramework

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Par défaut Module d'authentification et pages publiques
    Bonjour,

    Nous sommes en train de réaliser un site de type boostrap dans lequel nous avons ajouté le module d'authentification. D'ailleurs, si ça vous intéresse, je peux vous donner les vues et les contrôleur de rightsManager que nous avons généré.

    Toutefois, nous n'arrivons pas à définir des pages publiques. La moindre page demandée sans authentification nous renvoie dans auth::login.

    Y a-t-il un moyen, même non-logué, de pouvoir afficher certaines pages (un appel à faire dans le before de notre contrôleur par exemple) ?

    Cordialement

  2. #2
    Membre confirmé
    Homme Profil pro
    Responsable SAV
    Inscrit en
    Mars 2010
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable SAV

    Informations forums :
    Inscription : Mars 2010
    Messages : 122
    Par défaut
    Bonjour,
    D'après ce que j'ai lu à ce sujet, il suffit de désigner soit le module ou la méthode pour lesquels on désire l'authentification par l'expression suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _root::getAuth()->enable();
    Par exemple si on veut que tout le module soit soumis à une authentification
    on active la demande à ce niveau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public function before(){
      $this->oLayout=new _layout('template1');
      _root::getAuth()->enable(); //active la demande d'authentification
    ...
    }
    ...
    Par contre si on désire seulement la méthode par exemple edit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public function _edit()
    {
       _root::getAuth()->enable(); //active la demande d'authentification
     
       $tMessage=$this->processSave();
       ....
       $oPluginXsrf=new plugin_xsrf();
       $oView->token=$oPluginXsrf->getToken();
       $oView->tMessage=$tMessage;
     
       $this->oLayout->add('main',$oView);
    }
    Cordialement

  3. #3
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Billets dans le blog
    17
    Par défaut
    Je rajoute une information:
    Il y a deux modes de gestion de l'authentification sur une application: soit définir la variable site.auth

    Soit en laissant cette variable à 0 et comme l'a indiqué hadeslabs, ajoutez la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _root::getAuth()->enable();
    pour l'activer sur chacun des modules
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Par défaut
    Je viens de comprendre le fonctionnement. Le problème c'est que l'on cherche à faire l'inverse et je vais vous expliquer pourquoi

    En fait d'après ce que vous dites, c'est soit :

    • j'active dans le fichier conf/site.ini.php le module d'authentification pour l'ensemble des pages
    • je rajoute dans chaque contrôleur le code que tu indiques et la vérification n'est faite que pour une action ou l'ensemble du module


    Si j'utilise la 2ème solution, il suffit de ne pas mettre le code : _root::getAuth()->enable(); pour que la vérification des droits soit inactive et en effet, cela marche très bien... Le problème, c'est que dans ce cas, la session n'est pas initialisée et mon menu n'affiche plus rien de privé car il est incapable de savoir avec quel login nous sommes connecté.

    Voici le code pour que vous compreniez bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    <?php
    Class module_menu extends abstract_moduleembedded{
     
    	public function _index(){
     
                    // Liens avec gestion d'autorisation
                    $tLink = [
                        'Contacts' => 'Ccontact::list',
                        'Soci&eacute;t&eacute;' => 'Csociete::list',                    
                        'Droits' => 'rightsManager::list',                  
                    ];
     
                    // Liens publics
                    $tPublic = [ 
                        'Accueil' => 'default::index',
                        'Showcase' => 'default::showcase',
                        'Description' => 'default::description',
                        'Contact' => 'default::contact',
                        ];
     
                    // Désactivation des liens sans autorisation
                    foreach ($tLink as $sLabel => $sLink) {
                        $tNav = explode('::',$sLink);
     
                        if ( ! _root::getACL()->can('access',$sLink)) 
                        {
                            unset($tLink[$sLabel]);
                        }
                    }
     
                    // Sommes-nous connecté ? 
                    if (!_root::getAuth()->isConnected()) 
                        $tLogin = [ 'Connexion' => 'auth::login'];
                    else $tLogin = [ 'Déconnexion' => 'auth::logout'];
     
    		$oView=new _view('menu::index');
    		$oView->tLink=array_merge($tPublic,$tLink,$tLogin);
     
    		return $oView;
    	}
    }
    Ce que je cherche à faire (peut-être à tord) c'est l'inverse :
    • Garder le module d’authentification tout le temps actif depuis la configuration principale
    • Avoir une fonction de type _root::getAuth()->disable() qui coupe la redirection pour un action/module donné


    Je m'y prends peut-être mal. Quelqu'un à une solution ?

  5. #5
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Billets dans le blog
    17
    Par défaut
    Je comprends l'idée

    Il faut mettre la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    _root::getAuth()->enable();
    non pas dans votre module menu, mais dans le module "principal" qui inclut ce menu
    ainsi au moment de charger le menu (quelques lignes plus tard) l'authentification sera déjà active

    Par exemple dans un module article, appelant un module menu
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php 
    class module_article extends abstract_module{
     
    	public function before(){
    		//on active l'authentification des le depart du module article
    		_root::getAuth()->enable(); 
     
    		$this->oLayout=new _layout('template1');
     
    		//ici quand on appel notre menu, la session est déjà démarrée :)
    		$this->oLayout->addModule('menu','menu::index');
    	}
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Architecte technique
    Inscrit en
    Mars 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2015
    Messages : 5
    Par défaut
    Merci pour la réponse aussi rapide.

    Si je résume : je mets le : _root::getAuth()->enable(); dans tous les modules qui doivent-être privés : par exemple : "module_article" méthode "before"

    Mais : pour mes pages publiques (part exemple l'ensemble du module default)
    • si je mets : _root::getAuth()->enable(); dans le before du module il devient privé (je vais direct sur auth::login sans pouvoir intervenir)
    • si je ne le mets pas, il devient publique (plus de redirection) mais je n'ai pas de chargement de la session (plus de menu)


    J'ai même essayé de mettre le _root::getAuth()->enable(); dans le module menu mais cela provoque immédiatement la redirection.

    Il faudrait décorréler le chargement de la session et la redirection. Je ne sais pas si je suis très clair ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment faire aparaitre un module joomla dans une page statique
    Par Nadjia.ccce dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 6
    Dernier message: 31/05/2007, 19h13
  2. authentification iss page active directory
    Par maatthieu dans le forum Windows Serveur
    Réponses: 3
    Dernier message: 05/09/2006, 21h11
  3. Module d'authentification Apache
    Par webrider dans le forum Apache
    Réponses: 6
    Dernier message: 27/06/2006, 18h20
  4. module d'authentification & d'autorisation
    Par yanis97 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 26/01/2006, 19h20
  5. [JAAS]Module d'authentification
    Par yanis97 dans le forum Sécurité
    Réponses: 3
    Dernier message: 10/07/2005, 19h20

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