Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 07-05-2008 11:10:28

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

[PROPOSAL]Simplifier Zend_auth pour les base de données

Salut à tous une proposition qui simplifierait la vie du développeur lorsqu'on a besoin d'un adapter spécifique pour une l'authentification avec une base de donnée.

en gros Zend_Auth avec un base propose simplement

Code:

SELECT
   *,
   'credentialColumn' = 'credential' AS zend_auth_credential_match
FROM userTable
WHERE 'identityColumn' = 'identity ';

Cela corresponds effectivement au besoin dans 99% des cas
Mais il arrive que le schémas ne soit pas celui-ci. il devient alors compliqué d'utiliser Zend_Auth.

un exemple simple ma table user contient un champs 'valid' qui dit si l'utilisateur est valide.
il est impossible d'ajouter un

Code:

AND 'valid' = true

Je dois donc après l'utilisation de Zend_Auth vérifier ce paramètre.
c'est exemple est le cas simple.
il peut arriver que la règle qui va donner l'accord sur l'authentification soit plus complexe. et là ça deviens plus que génant car il faut faire en php ce que la base sait très bien faire.

je propose donc d'ajouter une méthode dans Zend_Auth_Adapter_DbTable

Code:

    protected function _getQuery() {
        $credentialExpression = new Zend_Db_Expr(
            $this->_zendDb->quoteInto(
                $this->_zendDb->quoteIdentifier($this->_credentialColumn)
                . ' = ' . $this->_credentialTreatment, $this->_credential
                )
            . ' AS zend_auth_credential_match'
            );

        // get select
        $dbSelect = $this->_zendDb->select();
        $dbSelect->from($this->_tableName, array('*', $credentialExpression))
                 ->where($this->_zendDb->quoteIdentifier($this->_identityColumn) . ' = ?', $this->_identity);
        return $dbSelect;
    }

de remplacer les lignes 304 à 315

Code:

        $credentialExpression = new Zend_Db_Expr(
            $this->_zendDb->quoteInto(
                $this->_zendDb->quoteIdentifier($this->_credentialColumn)
                . ' = ' . $this->_credentialTreatment, $this->_credential
                )
            . ' AS zend_auth_credential_match'
            );

        // get select
        $dbSelect = $this->_zendDb->select();
        $dbSelect->from($this->_tableName, array('*', $credentialExpression))
                 ->where($this->_zendDb->quoteIdentifier($this->_identityColumn) . ' = ?', $this->_identity);

par :

Code:

$dbSelect = $this->_getQuery();

à partir de là il devient très simple de surcharger la classe Zend_Auth_Adapter_DbTable
il suffit de dériver cette classe Zend_Auth_Adapter_DbTable en My_Auth_Adapter_DbTable
de redéfinir la requête et d'utiliser la classe dérivée.

le même type de mécanisme peut être envisagé pour LDAP
de nombreuse société ont dans leur base ou leur annuaire des entrée qui sont réservée à des usage spécifiques et ces entrée ne corresponde pas un une authentification valide.

un simple exemple
l'annuaire contient la liste de tout le personnel de la boite. mais lorsque quelqu'un quitte la boite on ne le retire pas car son identifiant doit rester connu du SI pour la pérennité des informations. la personne est donc marqué comme n'étant plus membre du personnel.
avec Zend_Auth quelqu'un qui utiliserait le les login et password de cette personne serait authentifié Alors qu'il s'agit à coup sur d'une usurpation.
en adaptant Zend_Auth au mécanisme inter de la boite l'usurpation de ce type n'est plus possible.

dans ma boites les compte sont crée à l'avance et s'active entre deux date. Avec Zend_Auth tel qu'il est je dois bricoler avec un post traitement pour appliquer cette règle. un simple AND dans la requête faite ce travail.

A+JYT

Hors ligne

 

#2 10-05-2008 15:49:36

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [PROPOSAL]Simplifier Zend_auth pour les base de données

Hello,

Regardes http://framework.zend.com/manual/fr/zen … nced_usage

Tu peux faire :

Code:

$adapter = new Zend_Auth_Adapter_DbTable($db, 'utilisateurs', 'login', 'password', 'MD5(?) AND \'valid\'=true');

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#3 10-05-2008 17:26:17

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [PROPOSAL]Simplifier Zend_auth pour les base de données

j'ai déjà regardé ça mais il est impossible avec ça d'aller plus loin que d'ajouter une clause sur un champs de la table user

ce que je propose c'est un mécanisme qui permet simplement de définir soit même la requête à effectuer sur la base

par exemple dans mon SI les personne reconnues doivent être inscrite dans le système avoir un dans de début de validité inférieure à la date du jour une date de fin de validité supérieure à la date du jour
avoir au moins un rôle définit dans l'entreprise pour une période couvrant la date du jour.

tel qu'il existe Z_A_A_DT me permets simplement de vérifier la première partie à savoir les dates de validité de la personne

pour le reste il faut refaire une requête.
après Z_A_A_DT et changer le true en false si les conditionne sont pas remplies.

A+JYT

Hors ligne

 

#4 10-05-2008 18:22:28

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [PROPOSAL]Simplifier Zend_auth pour les base de données

Hello,

En quelle version es-tu ?

Ceci existe depuis la version 1.5.0. Z_A_A_DT a été fractionné et ce que tu proposes correspond à la fonction "_authenticateCreateSelect()"

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#5 10-05-2008 19:36:56

sekaijin
Membre
Date d'inscription: 17-08-2007
Messages: 1137

Re: [PROPOSAL]Simplifier Zend_auth pour les base de données

OK je suis en 1.0.3 car PHP incompatible avec la 1.5
Ok  alors on peu clore le débat

A+
JYT

Hors ligne

 

#6 11-05-2008 11:01:58

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [PROPOSAL]Simplifier Zend_auth pour les base de données

Hello,

Normalement la version 1.0.4 comporte aussi ce changement.

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages