NANO-FRAMEWORK.COM

Framework PHP Objet UML

Navigation
HOWTO
Boîte à outils
Outils personnels
Action :

Acl

ACL sera prochainement placé dans un plugin, sont fonctionnement ne devrait en être que légèrement modifié

Pré-requis

Le contôle d'accès s'appuie sur un objet User du modèle qui devra exister. Voici sa définition :

 
User : 
    attributes :
        login : 
            type : varchar(255)
        password :
            type : varchar(255)
        checked : 
            type : boolean
    access : final
 

Le mot de passe doit être encodé au format MD5 et l'objet acl utilise la methode find_by_login_and_password de l'objet User, vous devez la créer si elle n'existe pas dans le fichier models/class/User.php :

 
public function find_by_login_and_password($login, $password)
{    
    return $this->find_all(array('conditions'=>"login='".addslashes($login)."' AND password='".addslashes($password)."'"));
}
 

Attention à bien vérifier les paramètres passés, il y a de grande chances pour qu'ils soient fournis par vos visiteurs, vous devez vous prémunir contre les tentatives d'intrusion (Voir addslashes et les injections SQL)

Utilisation

Vous pouvez placer les fonctions de connexion et déconnexion dans votre contrôleur préféré, voici un exemple :

 
function login()
{
    $user = $this->request->get_parameter('user');        
 
    if($user)
    {
    	if($this->acl->login($user, $this->request->get_parameter('password'))) 
    	{
            $this->view->m = _('Bienvenue');
    	}
    	else
    	{
  	    $this->view->m = _('User/Password érroné');
	} 
 
    	// On renvoie le nom saisi pour remplir le formulaire en cas d'échec
    	$this->view->form_user = $user;
    }
}
 
function logout()
{
    $this->acl->logout();
    $this->redirect_to(array('action'=>'login'));
}
 

Puis dans les contrôleurs que vous souhaitez restreindre l'accès ajoutez simplement une vérification dans la méthode before_filter() :

 
public function before_filter()
{
    $this->acl->access(WEB_PATH.'/accueil/login');
}
 

La méthode access redirigera l'utilisateur vers l'adresse passée en paramètre si ce dernier n'est pas authentifié. Cette méthode accepte deux autres paramètres optionnel permettant le retour vers la page d'origine :

 
public function before_filter()
{
    $this->acl->access(WEB_PATH.'/accueil/login', $_SERVER['REQUEST_URI'], $_SERVER['QUERY_STRING']);
}
 

En faisant ainsi, toutes les action sont soumises au contrôle d'accès. Vous pouvez exclure les actions que vous souhaitez rendre libre d'accès en les indiquant dans le tableau des exclusions dans le constructeur du contrôleur :

 
function __construct()
{
    parent::__construct();
 
    $this->acl->except = array('login', 'logout');
 
    // Le reste du constructeur...
}
 
Récupérée de « http://wiki.nano-framework.com/index.php/Acl »