Dynamic-Mess.com


"The world is a dynamic mess of jiggling things..."

Zend Framework 2 : la gestion de la connexion avec ZfcUser

Article posté le 26-06-2014 dans la catégorie PHP

La 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.

1- Préambule

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

2- Installation

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).

3- Gestion des pages

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')),
            ),

4- Gestion des utilisateurs

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 :

 

 


Tweet
comments powered by Disqus