Frefred.fr

eZ Role

eZ Role est une extension eZpublish . Elle permet d'exporter/importer les rôles via des fichiers formatés en YAML. Cette extension est encore en alpha, mais vous pouvez déjà d'or et déjà la trouver à l'adresse suivante : http://projects.ez.no/ezinstall

Comme petite histoire pour le dépot, l'extension se nommait à la base eZ Install. L'objectif de l'extension était de pouvoir créer/modifier les classes et les rôles. Comme eZ publish implémente l'utilisation des packages, les différentes fonctionnalités sur les classes étaient redondantes. Je me suis exclusivement porté sur l'import/export des rôles et droits. Je l'ai donc renommée en eZ Role.

Je vais expliquer brievement les quelques points que je juge intéressant, au cas où ca vous donne des idées.

Pour avoir une idée des différents choix techniques, voici une petite idée des différents objectifs de mon extension :

  • bonne intégration à eZ publish : histoire de faciliter le plus possible l'utilisation de cette extension, j'ai intégré le plus possible les différentes fonctions au sein des templates déjà existants d'eZ publish.
  • format des fichiers simples : l'idée est qu'on peut les lire facilement, ou les créer aussi facilement à la main, histoire de ne pas avoir à passer par l'interface de création de droits. Le format YAML a été choisit pour ça.

Lire/écrire les fichiers YAML

Pour manier les fichiers YAML, j'utilise la classe Spyc . Cette classe fournit des fonctions simples à utiliser.

 require_once "spyc.php";
 
// Charge un fichier YAML dans une variable
$data = Spyc::YAMLLoad('spyc.yaml');
 
// Transforme le contenu d'une variable PHP au format YAML
$content = Spyc::YAMLDump( $data );
 

eZ publish - Téléchargement d'un fichier

Lors de l'exportation, je récupère les droits dans une variable php, avant de la transformer au format YAML. Au lieu d'écrire le résultat de l'exportation sur le serveur en lui même, j'ai fouillé un peu la classe eZFile. Gràce à cette classe, j'ai trouvé une petite méthode me permettant de proposer directement en téléchargement le fichier. Voici les différentes lignes que j'ai utilisé :

eZFile::create( $fileName , false, $content );
eZFile::download( $fileName );

Ces 2 fonctions permettent de créer le fichier, et de le proposer directement en téléchargement, sans écrire sur le disque.

eZSiteInstaller - updateRoles

La classe eZSiteInstaller fournit de nombreuses méthodes assez sympas, tel que updateRoles, addClassAttributes. Elle vaut le détour cette petite classe.

La méthode updateRoles prend en paramètre un tableau, et permet de créer/modifier les différents rôles qu'elle trouve dans le tableau fournit.

Méthode très simple à faire, et qui m'a permis d'écrire qu'une dizaine de ligne pour importer les rôles.

TODO

L'extension va encore subir quelques modifications, tel que l'utilisation des remote_id pour faire la correspondance entre diverses instances eZpublish .

J'hésite dans la possibilité de mettre en place une interface permettant de choisir quelles polices mettre à jour.

Bookmark and Share

Commentaires

#1 - Le 26 Août 09 par Jérôme

eZXMLInstaller

Bonjour Fred,

peut-être serais-tu intéressé par l'extension eZXMLInstaller :

- http://projects.ez.no/ezxmlinstaller

:)

#2 - Le 26 Août 09 par Damien

Exemple de YAML

Salut Fred,

ça a l'air intéressant comme extension pour se passer de la très fastidieuse étape de définition des roles. En revanche ça manque d'un petit exemple sur comment le fichier YAML est organisé.

A+

#3 - Le 26 Août 09 par Frefred

eZXMLInstaller / YAML

@Jérome

j'avais déjà vu l'extension ezxmlinstaller. A mon avis, même si cette extension est super complète, le fichier XML à écrire est plus lourd qu'un simple fichier YAML. De plus, eZ Role sert à pallier à un manque d'eZ publish sur les rôles ( à quand l'intégration des rôles dans les packages :) )

@Damien

j'ai exporté rapidement le rôle Anonyme pour donner une idée des fichiers YAML. Voici un exemple rapide :

-
name: Anonyme
policies:
-
module: content
function: read
limitation:
Section:
- 1
- 3
-
module: content
function: pdf
limitation:
Section:
- 1
-
module: user
function: login
limitation:
SiteAccess:
- 1964517093
- 2479546403
- 2582995467
- 4048279455
- 4158576186
- 701843870

#4 - Le 26 Août 09 par truffo

Pourquoi du YAML ?

Je trouve bizare de devoir fonctionner avec du YAML, mais c'est vraiment trop pénible à manipuler comme langage.

Sinon t'as pas un problème de cache sur ton accueil , moi je dit ça je dit rien ...

#5 - Le 27 Août 09 par Frefred

YAML, quand tu nous tiens !

J'ai hésité entre le XML, le YAML et une syntaxe perso.

Histoire de pas réinventer la roue, j'ai utilisé le YAML, car je le trouve plus simple que le XML. De simples tabulations et des tirets face à des balises. Le poids n'est pas le même non plus.

Pour ma page d'accueil, soit elle est très sélect, on a la classe ou on l'a pas c'est pour ça :), soit elle se génère en cache statique, alors qu'elle ne devrait pas :'(

#6 - Le 27 Août 09 par Damien

cache statique

j'ai l'impression que le cache statique de ta page d'accueil se re-génére à partir du cache statique existant... cf l'empilement de commentaires du type "<!-- Generated: 2009-08-27 09:53:04 -->" dans la source.

#7 - Le 31 Août 09 par Jérôme V.

eZXMLInstaller

Salut ! Tu t'es finalement décidé à la publier cette extension ;-) !
J'ai aussi essayé eZXMLInstaller mais elle fonctionne très très mal pour ce qui est des objets de contenu ! Je n'ai pas essayé pour les classes et les rôles par contre...

#8 - Le 01 Sept 09 par frefred

Retour de bug

Cette version étant en alpha, si vous trouvez quelques bugs, ou des choses à améliorer d'un point de vue ergonomique, faites moi signe.

Faudrait installer un bug tracker sur projects :)

Ajouter un commentaire