Bonjour je cherche à mettre en place deux types d'utilisateurs pour un outil web précis, je vous présente la démarche pour ne pas avoir à simplement différencier les deux types par un user_type_id, c'est une bonne démarche mais là c'est n'est pas un problème de rôles c'est deux type d'utilisateurs sont significativement différent.
Pour les utilisateurs dit classique, j'utilise Auth components par défaut et cela fonctionne à merveille :) via mon model User et ma table users.
Pour les Pro je souhaiterais avoir plus d'informations, dois je créer un Auth components perso avec les paramètres similaire à l'utilisateur classique car un login c'est un login (email/password) ou autre ? Je cherche la meilleur façon de faire pour distinguer deux type d'utilisateur via deux models distincts.
L'authentification basique sur CakePHP se fait (nativement), sur le couple login/password.
Mais si tu veux deux types d'authentifications différentes, tu peux laisser celle de base pour les utilisateurs classiques et tu peux en créer un second type pour les utilisateurs professionnels en précisant les infos nécessaires pour l'identification.
Regardes la doc de CakePHP sur le composant Auth, elle est relativement précise sur le sujet.
Merci pour cette réponse @Lartak11, j'ai utilisé le composant Auth je ne sais pas si c'est la meilleur pratique en revanche elle s'applique bien à mon système.
Pratique :
Création de deux systèmes Auth:
app/Controller/Component/Auth/UserAuthenticate.php
<?php
App::uses('FormAuthenticate', 'Controller/Component/Auth');
class UserAuthenticate extends FormAuthenticate {
}
app/Controller/Component/Auth/ProAuthenticate.php
<?php
App::uses('FormAuthenticate', 'Controller/Component/Auth');
class ProAuthenticate extends FormAuthenticate {
}
puis dans mon AppController:
public $components = array(
'Session',
'Cookie',
'Auth' => array(
'authenticate' => array(
'Pro' => array(
'userModel' => 'Pro',
'scope' => array('Pro.active' => 1),
'fields' => array('username' => 'email')
),
'User' => array(
'userModel' => 'User',
'scope' => array('User.active' => 1),
'fields' => array('username' => 'email')
)
)
)
);
J'étais justement en train de réfléchir sur un cas similaire . Merci pour cette solution qui va aussi m'aider :D