Bonjour,
Est ce que c'est possible de redefinir un component Auth dans le controller.
mon site doit comporter 2 types de comptes

1 un compte d'utilisateur standard

ce type d utilisateur se connecte avec un pseudo (username et mot de passe) ya un model User

1 - un compte pour les enseignants

je veux que ce type de compte d'identifie avec un email et un mot de passe (il ya un model Enseignant)

Merci pour l'aide

7 réponses


Blinkers
Réponse acceptée

Oui c'est possible :
Dans le core.php :

Configure::write('Routing.prefixes', array('membre', 'enseignant'));

Tu as simplement besoin de les définir dans le AppController de cette façon :

<?php
    public function beforeFilter(){
        // Auth
        if($this->request->prefix == 'membre' || ($this->request->params['controller'] == 'users' && $this->request->params['action'] == 'login')) {
            AuthComponent::$sessionKey = 'Auth.User';
            $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login', 'membre' => false);
            $this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'home', 'membre' => true);
            $this->Auth->authenticate = array(
                'Form' => array(
                    'userModel' => 'User',
                    'scope' => array('User.disabled' => 0),
                    'fields' => array('username' => 'username')
                )
            );

            $this->Auth->allow('login', 'logout');
        }
        elseif($this->request->prefix == 'enseignant' || ($this->request->params['controller'] == 'teachers' && ($this->request->params['action'] == 'login') {
            AuthComponent::$sessionKey = 'Auth.Teacher';
            $this->Auth->loginAction = array('controller' => 'teachers', 'action' => 'login', 'enseignant' => false);
            $this->Auth->loginRedirect = array('controller' => 'teachers', 'action' => 'home', 'enseignant' => true);

            $this->Auth->authenticate = array(
                'Form' => array(
                    'userModel' => 'Teacher',
                    'scope' => array('Teacher.disabled' => 0),
                    'fields' => array('username' => 'email')
                )
            );

            $this->Auth->allow('login', 'logout');
        }
        else{
            $this->Auth->allow();
        }
    }

En imaginant que tu utilise la table et le modèle users pour tes utilisateurs et la table et le modèle teachers pour tes enseignants.
Plein de chose sont paramètrables.
Là c'est en imaginant que tu préfixe tes actions et vues avec "membre" et "enseignant" pour les actions correspondantes.

Tu es sur CakePHP2 ou 3 ?

tincode
Auteur

2.7 exactement

tincode
Auteur

@Majid Merci c'est un article interessant je vais essayer de lire. néanmoins si y'a une autre suggestion je suis preneurs .

Effectivement les alternatives ne manquent pas, malheuresement t'aura plus de chance de trouver des références coté anglophone.
Cakephp Auth with multiple “Users” tables

tincode
Auteur

@Blinkers 10000000 merci une grande piste à explorée mercii