Article mis à jour le : 05-05-2022
Comment mettre en place un système de connexion avec Zend Framework 2 avec les modules Zfcuser et BjyAuthorizeLa suite de mes précédents tutoriels pour la mise en place d'une application avec Zend Framework 2. Aujourd'hui, mise en place d'un système de connexion avec les modules ZfcUser et BjyAuthorize.
Tout d'abord, vous devez avoir installé les deux modules, via les commandes :
php composer.phar require zf-commons/zfc-user:dev-master
et
php composer.phar require bjyoungblood/bjy-authorize:1.3.*
Note, il se peut que parfois, vous préfériez les installer manuellement, vous aurez alors besoin de télécharger le zip de chaque module et le dézipper dans le répertoire module de votre installation Zend. Les trois répertoires doivent le cas échéant porter les noms ZfcUser et BjyProfiler et BjyAuthorize.
Voici où trouver les sources :
https://github.com/bjyoungblood/BjyAuthorize
https://github.com/ZF-Commons/ZfcUser
Dans votre fichier module.config.php, activez les modules :
'modules' => array(
'Livres',
'BjyProfiler',
'ZfcUser',
'BjyAuthorize',
),
Ensuite, dans le fichier:
vendor/bjyoungblood/bjy-authorize/data/schema.sql, vous trouverez le code nécessaire pour créer la première partie de vos tables nécessaires à la gestion des utilisateurs :
CREATE TABLE IF NOT EXISTS `user_role` (
`role_id` varchar(255) NOT NULL,
`is_default` tinyint(1) NOT NULL,
`parent` varchar(255) DEFAULT NULL,
PRIMARY KEY (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE IF NOT EXISTS `user_role_linker` (
`user_id` int(11) unsigned NOT NULL,
`role_id` varchar(255) NOT NULL,
PRIMARY KEY (`user_id`,`role_id`),
KEY `role_id` (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Ensuite, dans le fichier:
vendor/zf-commons/zfc-user/data/schema.sql, vous trouverez le code nécessaire pour créer la seconde partie de vos tables nécessaires à la gestion des utilisateurs :
CREATE TABLE user
(
user_id INTEGER PRIMARY KEY AUTO_INCREMENT NOT NULL,
username VARCHAR(255) DEFAULT NULL UNIQUE,
email VARCHAR(255) DEFAULT NULL UNIQUE,
display_name VARCHAR(50) DEFAULT NULL,
password VARCHAR(128) NOT NULL,
state SMALLINT
) ENGINE=InnoDB;
Ensuite, dans votre répertoire module/ZfcUser/config/zfcuser.global.php, remplacez le code existant par :
$settings = array(
'zend_db_adapter' => 'ZendDbAdapterAdapter',
'user_entity_class' => 'ZfcUserEntityUser',
'enable_registration' => true,
'enable_username' => true,
'auth_adapters' => array( 100 => 'ZfcUserAuthenticationAdapterDb' ),
'enable_display_name' => true,
'auth_identity_fields' => array('email', 'username'),
'login_form_timeout' => 300,
'user_form_timeout' => 600,
'login_after_registration' => false,
'use_registration_form_captcha' => false,
'use_redirect_parameter_if_present' => true,
//'user_login_widget_view_template' => 'zfc-user/user/login.phtml',
//'login_redirect_route' => 'zfcuser',
//'logout_redirect_route' => 'zfcuser/login',
//'password_cost' => 14,
//'enable_user_state' => true,
//'default_user_state' => 1,
//'allowed_login_states' => array( null, 1 ),
'table_name' => 'user',
);
/**
* You do not need to edit below this line
*/
return array(
'zfcuser' => $settings,
'service_manager' => array(
'aliases' => array(
'zfcuser_zend_db_adapter' => (isset($settings['zend_db_adapter'])) ? $settings['zend_db_adapter']: 'ZendDbAdapterAdapter',
),
),
);
Dernière étape de configuration : vous devez copier ensuite le fichier vendor/BjyAuthorize/config/module.config.php vers le répertoire config/autoload/module.bjyauthorize.global.php
A l'intérieur, tout en bas, vous pouvez gérer les zones accessibles du site, en fonction des différents droits :
Vous pouvez gérer ces pages accessibles ou non, via notamment :
Je vous laisse regarder la doc de bjyauthorize pour voir ces possibilités (sur la page GitHub mentionnée en haut de ce tutoriel).
Nous y voilà donc. Pour ma part, sachez que je veux que tout sauf la home de mon application soit accessible uniquement par un utilisateur connecté. Voici ce que donne la paramétrage mentionné juste avant :
// Guard listeners to be attached to the application event manager
'guards' => array(
'BjyAuthorizeGuardRoute' => array(
array('route' => 'zfcuser', 'roles' => array('user')),
array('route' => 'zfcuser/logout', 'roles' => array('user')),
array('route' => 'zfcuser/login', 'roles' => array('guest')),
array('route' => 'zfcuser/register', 'roles' => array('guest')),
// Below is the default index action used by the ZendSkeletonApplication
array('route' => 'home', 'roles' => array('guest', 'user')),
array('route' => 'livres', 'roles' => array('user')),
array('route' => 'livres/ajout', 'roles' => array('user')),
array('route' => 'livres/editer', 'roles' => array('user')),
array('route' => 'livres/delete', 'roles' => array('user')),
array('route' => 'livres/rechercher', 'roles' => array('user')),
array('route' => 'livres/resultatsrecherche', 'roles' => array('user')),
array('route' => 'livres/details', 'roles' => array('user')),
array('route' => 'genres', 'roles' => array('user')),
array('route' => 'genres/ajout', 'roles' => array('user')),
array('route' => 'genres/editer', 'roles' => array('user')),
array('route' => 'lieux', 'roles' => array('user')),
array('route' => 'lieux/ajout', 'roles' => array('user')),
array('route' => 'lieux/editer', 'roles' => array('user')),
array('route' => 'auteurs', 'roles' => array('user')),
array('route' => 'auteurs/ajout', 'roles' => array('user')),
array('route' => 'auteurs/editer', 'roles' => array('user')),
),
Voici les url que vous devez utiliser:
Vous devez créer évidemment un utilisateur pour pouvoir vous connecter. Dans votre bdd, dans la table user_role_linker, pensez à vérifier que l'ID de l'utilisateur que vous venez de créer est bien en role admin, afin que vous puissiez avoir toutes le possibilités pour vos tests.
Notes :