GVN Group

FR EN Print 

   


 

Permissions

Permissions

En association avec l'identification, vous pouvez gérer les permissions accordées à l'utilisateur.

Définir le schéma des permissions pour votre système

Un des premiers points à régler est de décider comment organiser les permissions, d'un point de vue fonctionnel.

Les applications

Commencez par le niveau fonctionnel le plus élevé: les applications. Faites une liste des applications qui nécessitent une gestion des permissions

Aires fonctionnelles

Chaque application peut être divisée en aires fonctionnelles. Pour chaque application, énumérez toutes les parties qui requièrent une gestion particulière des permissions.

Les droits

Pour chaque aire fonctionnelle, définissez tous les droits dont il faut tenir compte.

Du fonctionnel au technique...

Maintenant que vous avez défini vos besoins, voyons comment compléter les tables LiveUser.

La table «liveuser_applications»

Pour chaque application, notez leur nom et un identifiant.

La table contient quelques champs:

  • application_id: l'identifiant de l'application
  • application_define_name: le nom de l'application

Exemple:

liveuser_applications
application_id application_define_name
1 TEST

La table «liveuser_areas»

Pour chaque aire fonctionnelle, notez son nom et son identifiant ainsi que l'identifiant de l'application de laquelle elle dépend.

La table contient quelques champs:

  • area_id: l'identifiant de l'aire fonctionnelle
  • application_id: l'identifiant de l'application à laquelle elle se rattache
  • area_define_name: le nom de l'aire fonctionnell

Exemple: dans notre exemple, l'application «TEST» sera composée de 4 aires fonctionnelles.

liveuser_areas
application_id area_id area_define_name
1 1 EVENT
1 2 RECEIPT
1 3 REAL_ESTATE
1 4 ADMIN

La table «liveuser_rights»

Pour chaque droit, notez le nom du droit, l'identifiant de l'aire fonctionnelle à laquelle il est associé et l'identifiant du droit.

La table contient quelques champs:

  • right_id: l'identifiant du droit
  • area_id: l'identifiant de l'aire fonctionnelle à laquelle ce droit se rattache
  • right_define_name: le nom du droit
  • has_implied: un booléen indiquant si, lorsque l'utilisateur se voit accorder ce droit, un (ou plusieurs) autre(s) droit(s) lui sera également accordé. Les droits implicites sont spécifiés dans la table «liveuser_right_implied».
    Attention: ceci n'est utilisable qu'au niveau de gestion de permissions complexe (voir plus loin). D'ici là, nous laisserons la valeur à «0».

Exemple: les utilisateurs pourront se voir accorder 4 droits différents à l'aire fonctionnelle «EVENT»:

liveuser_rights
area_id right_id right_define_name has_implied
1 1 EVE_VIEW 0
1 2 EVE_CREATE 0
1 3 EVE_EDIT 0
1 4 EVE_DELETE 0

Gestion des utilisateurs

La table «liveuser_users»

Les informations concernant l'authentification des utilisateurs sont sauvegardées dans la table «liveuser_users».

liveuser_users
auth_user_id handle ...
25 userF ...

La table «liveuser_perm_users»

Les informations relatives aux permissions des utilisateur est sauvegardée dans la table «liveuser_perm_users»:

  • perm_user_id: un identifiant unique pour un utilisateur au niveau de la gestion des permissions
  • auth_user_id: un identificateur de l'utilisateur au niveau de la gestion de l'authentification
  • auth_container_name: le numéro ou le nom du conteneur (container) pour l'authentification
  • perm_type: nous indiquerons la valeur pour un utilisateur simple (= 1) et nous reviendrons plus tard sur l'usage de ce champ
liveuser_perm_users
perm_user_id auth_user_id auth_container_name perm_type
12 25 0 1

Etablir les liens entre les tables d'authentification et de permission

Pour établir les liens entre ces deux tables, le «auth_user_id» pour un conteneur (container) d'authentification particulier est lié à un «perm_user_id» unique. Un seul conteneur d'authentification sera utilisé dans cet exemple.

Il est utile de se souvenir que LiveUser est capable de supporter plus d'un conteneur (container) d'authentification (par exemple une base de données database contenant la liste des employés fixes et un fichier XML contenant la liste des consultants externes) mais ne supporte qu'un seul conteneur pour les permissions. Tous les utilisateurs faisant partie de n'importe quel conteneur (container) d'authentification sera lié à un «perm_user_id» unique.

Notez que ces liens sont optionnels. Si un lien entre un enregistrement de la table «liveuser_users» et un enregistrement de la table «liveuser_perm_users» ne peut être établi, l'utilsateur authentifié ne fera partie d'aucun groupe et ne se verra accorder aucun droit.

Lien utilisant une clé numérique

Dans notre fichier de configuration, «authContainters» contient une source d'authentification MDB2. Aucune clé n'y est associée. Cette source est donc implicitement associée à la valeur «0».

<?php     ...
        'authContainers' => array(
            array(
                'type'          => 'MDB2',          // auth container name
                'expireTime'    => 3600,            // max lifetime of a session in seconds
                'idleTime'      => 1800,            // max time between 2 requests
                'allowDuplicateHandles' => 0,
                'allowEmptyPasswords'   => 1, 
                'passwordEncryptionMode'=> 'MD5',
   ...
?>

La valeur qui doit être assignée à «auth_container_name» est donc égale à zéro.

liveuser_perm_users
perm_user_id auth_user_id auth_container_name perm_type
12 25 0 1

Liens utilisant un vecteur associatif

Vous pouvez adapter le fichier de configuration et associer une clé au conteneur (container) d'authentification.

   ...
        'authContainers' => array(
            'myTestDB' => array(
                'type'          => 'MDB2',          // auth container name
                'expireTime'    => 3600,            // max lifetime of a session in seconds
                'idleTime'      => 1800,            // max time between 2 requests
                'allowDuplicateHandles' => 0,
                'allowEmptyPasswords'   => 1,
                'passwordEncryptionMode'=> 'MD5',
   ...

Dans ce cas, la valeur qui doit être indiquée comme «auth_container_name» doit être égale à «myTestDB».

liveuser_perm_users
perm_user_id auth_user_id auth_container_name perm_type
12 25 myTestDB 1

Quel que soit le système que vous choisissez, veillez à ce que votre solution soit consitante, sans quoi celà ne fonctionnera pas.

Assigner des droits aux utilisateurs

Il y a plusieurs manières de l'effectuer:

  • assigner un droit directement a un utilisateur
  • assigner un droit à un groupe d'utilisateurs
  • assigner un droit à un sous-groupe d'utilisateurs et/ou hériter d'un droit implicite

En les énumérant, nous avons en fait défini les 3 niveaux de gestion de permission que LiveUser supporte:

Nous les couvrirons dans les pages suivantes.