Version 1.0.0 - 2006/01/31

5.5 Authentification

La problématique de l’authentification peut se résoudre de diverses manières. Toujours fidèle à sa philosophie, rester dans un environnement homogène, la plate-forme vous propose sa solution intégrée. Le principe est simple, nous établissions qu’un utilisateur doit procéder un identifiant et mot de passe pour se connecter à votre application. En tant qu’utilisateur reconnu comme tel par vos soins, il possède également un nom de connexion et des droits. Cette généralisation nous permet de traiter les cas les plus courant. Quelle que soit la classe que vous avez choisis pour la représentation d’un utilisateur, elle doit implémenter l’interface NoasUser. Il est recommandé d’importer la définition de votre classe dans votre session. Dans le cas contraire vous aurez des disfonctionnements dû à une mauvaise désérialisation.
Si vous ne souhaitez pas concevoir vos propres objets, vous pouvez utiliser la classe NoasXmlRemoteUser. Son objectif est surtout pédagogique, mais son utilisation en production n’est interdite. Vous n’avez juste qu’un simple fichier XML à éditer.
Pour plus de précision, reportez-vous aux DTDs correspondantes distribuées avec le framework.

Droits utilisateur par fichier XML

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE user-description PUBLIC "-//Noas PHP, The Framework.//DTD User Description 1.0//FR" "http://noas.sourceforge.net/dtds/noas-user_1_0.dtd">
<user-description>
  <user>
   <name>Reoka Djohou</name>
   <login>webobject</login>
   <password>pwd</password>
   <email>webobject@users.sourceforge.net</email>
   <profile>
      <right>CREATE_DUMMY</right>
      <right>UPDATE_DUMMY</right>
      <right>DELETE_DUMMY</right>
   </profile>
  </user>
  <user>
   <name>Too foobar</name>
   <login>client</login>
   <password>pwd</password>
   <email>client@client.com</email>
   <profile>
      <right>UPDATE_DUMMY</right>
   </profile>
  </user>
</user-description>

Authentification par fichier XML

<?php
Noas::import("noas.unit.NoasTestCase");
Noas::import("noas.xml.user.NoasXmlRemoteUser");
class UnitXmlUserTestCase extends NoasTestCase {
  function __construct(){
   parent::__construct("UnitXmlUserTestCase");
  } 
  protected function runTest(NoasDumpContext $dc){
    $dc->trace($this->name);
    $oUserCriterion = new NoasXmlRemoteUser();
    $oUserCriterion->setLogin("webobject");
    $oUserCriterion->setPassword("pwd");       

    /* @var $oUser NoasXmlRemoteUser */
    $oUser = NoasXmlRemoteUser::find(
  dirname(__FILE__).NOAS_SEPARATOR."UserDescription.xml"
                                                                        ,$oUserCriterion);
    $dc->dump_object("",$oUser);
    self::assertNotNull("User not found!", $oUser);
    self::assertFalse("Authenticated()", $oUser->isAuthenticated());
    self::assertFalse("hasRight()"
                               , $oUser->hasRight("CREATE_DUMMY"));
   
    $oUser->check();
      self::assertTrue("Authenticated()", $oUser->isAuthenticated());
    self::assertTrue("hasRight()"
                                     , $oUser->hasRight("CREATE_DUMMY"));
    self::assertTrue("hasRight()",
                                       $oUser->hasRight("UPDATE_DUMMY"));
    self::assertTrue("hasRight()",
                                        $oUser->hasRight("DELETE_DUMMY"));
   
    $oUserCriterion = new NoasXmlRemoteUser();
    $oUserCriterion->setLogin("client");
    $oUserCriterion->setPassword("pwd");       
   
    /* @var $oUser NoasXmlRemoteUser */
    $oUser = NoasXmlRemoteUser::find(
    dirname(__FILE__).NOAS_SEPARATOR."UserDescription.xml"
                                                                          , $oUserCriterion);
    $dc->dump_object("",$oUser);
    self::assertNotNull("User not found!", $oUser);
    $oUser->check();
    self::assertFalse("hasRight()"
                                 , $oUser->hasRight("CREATE_DUMMY"));
    self::assertTrue("hasRight()"
                                , $oUser->hasRight("UPDATE_DUMMY"));
   
    $oUserCriterion = new NoasXmlRemoteUser();
    $oUserCriterion->setLogin("XXXX");
    $oUserCriterion->setPassword("pwd");       

    /* @var $oUser NoasXmlRemoteUser */
    $oUser = NoasXmlRemoteUser::find(
    dirname(__FILE__).NOAS_SEPARATOR."UserDescription.xml"
                                                                             , $oUserCriterion);
    self::assertNull("User found!", $oUser);
   
    $dc->trace("Ok!");
  }
}
?>

 

© 2005 Réoka Djohou, tous droits réservés.