Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 23-03-2009 14:33:35

kaboume
Membre
Lieu: Bagneux
Date d'inscription: 21-09-2007
Messages: 24
Site web

[zend_acl] Stockage des règles d'autorisation dans un fichier XML

Hello,

Pour avoir une gestion des règles souple, je souhaite stocker mes autorisations dans un fichier XML.

LE but étant de charger le Zend_Acl à partir de ce fichier xml.

Est-ce que quelqu'un d'entre vous aurait déjà coder un truc de ce genre ?

Merci d'avance.

Dernière modification par kaboume (23-03-2009 14:33:51)

Hors ligne

 

#2 23-03-2009 20:39:09

Intiilapa
Membre
Date d'inscription: 03-02-2009
Messages: 95

Re: [zend_acl] Stockage des règles d'autorisation dans un fichier XML

À mon avis, cela doit se faire très simplement en cherchant dans la documentation. Avec par exemple un petit Zend_Config où tu précises l'adaptateur XML. Beaucoup de composants acceptent un objet Zend_Config en constructeur. En regardant rapidement, ce n'est pas le cas de Zend_Acl. Néanmoins, il suffit de dériver Zend_Acl pour définir un constructeur ou une méthode qui accepte un Zend_Config_Xml ou pas en paramètre. Après c'est un objet que tu moulines sur les méthode add() et allow(), etc.

Hors ligne

 

#3 23-03-2009 22:12:23

keilnoth
Membre
Date d'inscription: 30-08-2008
Messages: 128
Site web

Re: [zend_acl] Stockage des règles d'autorisation dans un fichier XML

Je propose sur mon blog une solution qui utilise des configurations via fichier INI, via Zend_Config_Ini. Il est très facile d'imaginer l'adaptation de ces classes avec comme source du XML.

Je te propose le lien sans prétention : Gestion des accès avec Zend Auth et Zend Acl


Quelques tutoriaux Zend Framework !

Hors ligne

 

#4 01-05-2012 02:09:48

ptitjib
Membre
Date d'inscription: 03-12-2009
Messages: 10

Re: [zend_acl] Stockage des règles d'autorisation dans un fichier XML

Bonjour,
Je cherchais la solution, et finalement je l'ai trouvée.
Alors je la poste pour en faire profiter ceux qui chercheraient (comme moi) encore  en 2012 et qui tomberaient sur cette page.

Deux fichiers: class My_Acl dans ../library/my/acl.php et acl.xml dans ../configs/acl.xml.

Code:

[lang=php]<?php
class My_Acl extends Zend_Acl {
        
    var $_config;
        
    public function __construct(Zend_Config $config) {
        
        $this->_config = $config;
        $this->loadRole();
        $this->loadRessources();
        $this->loadPrivileges();
        
    }
    
    private function loadRole(){
        $roles = $this->_config->roles;
        foreach($roles as $role) {
            if ($role->parent == null) {
                $this->addRole(new Zend_Acl_Role($role->name));
            } else {
                $this->addRole(new Zend_Acl_Role($role->name, $role->parent));
            }
        }
    }
    
    private function loadRessources() {
        $ressources = $this->_config->ressources;
        foreach($ressources->modules as $module) {
            $this->add(new Zend_Acl_Resource($module->modulename));
            if ($module->modulename == 'default') {
                foreach ($module->controllers as $controller) {
                    $this->add(new Zend_Acl_Resource($controller->controllername, $module->modulename));
                }
            } else {
                foreach ($module->controllers as $controller) {
                    $this->add(new Zend_Acl_Resource($module->modulename.':'.$controller->controllername, $module->modulename));
                }
            }
        }    
    }
    
    private function loadPrivileges() {
        $privileges = $this->_config->privileges;
        $rules = $privileges->rules->toArray();
        foreach ($rules['rule'] as $rule) {
            if ($rule['access'] == 'allow') {
                $this->allow($rule['role'], $rule['ressource'], $rule['privilege']!='null'?explode(',', $rule['privilege']):NULL);
            } else {
                $this->deny($rule['role'], $rule['ressource'], $rule['privilege']!='null'?explode(',', $rule['privilege']):NULL);
            }
        }
    }
    
}

Code:

[lang=xml]<?xml version="1.0" encoding="utf-8"?>
<config>
    <acl>
        <ressources>
            <modules>
                <default>
                    <modulename>default</modulename>
                    <controllers>
                        <error>
                            <controllername>error</controllername>
                        </error>
                        <index>
                            <controllername>index</controllername>
                        </index>
                    </controllers>
                </default>
                <auth>
                    <modulename>auth</modulename>
                    <controllers>
                        <index>
                            <controllername>index</controllername>
                        </index>
                    </controllers>
                </auth>
            </modules>
        </ressources>
        
        <roles>
            <guest>
                <name>guest</name>
                <parent>null</parent>
            </guest>
            <user>
                <name>utilisateur</name>
                <parent>guest</parent>
            </user>
            <chauffeur>
                <name>chauffeur</name>
                <parent>guest</parent>
            </chauffeur>            
            <admin>
                <name>administrateur</name>
                <parent>guest</parent>
            </admin>
        </roles>
        
        <privileges>
            <rules>
                <rule role="guest" access="allow" ressource="error" privilege="null" />
                <rule role="guest" access="allow" ressource="index" privilege="null" />
                <rule role="guest" access="allow" ressource="auth:index" privilege="index,login,forgotpasswword" />
                <rule role="utilisateur" access="deny" ressource="auth:index" privilege="login" />
                <rule role="utilisateur" access="allow" ressource="auth:index" privilege="logout" />
                <rule role="utilisateur" access="allow" ressource="default" privilege="null" />
            </rules>
        </privileges>
    </acl>
</config>

et dans le Bootstrap:

Code:

][lang=php]$acl = new My_Acl(new Zend_Config_Xml(APPLICATION_PATH . '\configs\acl.xml', 'acl'));

N'hésitez pas à apporter vos suggestions, j'espère que celà servira à certains.
JB

Dernière modification par ptitjib (01-05-2012 02:15:47)

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