Groupe 2F (stockage)

Date de création : 5 octobre 2004
Dernière modification : 13 avril 2005
Diffusion : internet

Configuration du fichier Domain.xml dans Slide

Résumé

Ce document explicite (rapidement pour le moment) la configuration du serveur Slide via le fichier Domain.xml.

Introduction

Le fichier Domain.xml permet entre autre de configurer (en partie) le serveur Slide. Il permet de créer et configurer des stores et de positionner les droits d'accès aux ressources par défaut. Ce document à pour but de configurer rapidement les 3 types de stores principaux de Slide ainsi que de positionner les droits par défaut.

Attention

Ce document n'a pas pour objectif d'expliciter les stores Slide en détail. Se référer à la documentation Slide pour celà.

Création et configuration des stores Slide

Les stores peuvent être définis comme les moyens de stockage utilisés pour stocker les informations/ressources (i.e. fichiers, droits d'accès, métadonnées...) sur le serveur Slide. On peut définir plusieurs méthodes de stockages pour plusieurs URL différentes.

Ex :

On distingue 3 types principaux de store, le store XML, le store MySQL et le store LDAP. D'autres stores peuvent être développés en fonction des besoins.

L'utilisation des stores s'effectue de la manière suivante :

Store XML

Le store XML (TxXMLFileDescriptorsStore) permet de stocker les informations/ressources dans des fichiers XML. C'est le store par défaut de Slide.

Définition du store dans le fichier Domain.xml

<definition>
<store name="xmlstore"> <!-- Nom du store -->
<nodestore classname="org.apache.slide.store.txfile.TxXMLFileDescriptorsStore">
<parameter name="rootpath">store/metadata</parameter> <!-- chemin physique de stockage des fichiers XML -->
<parameter name="workpath">work/metadata</parameter> <!-- chemin physique de stockage des fichiers XML -->
</nodestore>
<securitystore>
<reference store="nodestore"/>
</securitystore>
<lockstore>
<reference store="nodestore"/>
</lockstore>
<revisiondescriptorsstore>
<reference store="nodestoSection Bre"/>
</revisiondescriptorsstore>
<revisiondescriptorstore>
<reference store="nodestore"/>
</revisiondescriptorstore>
<contentstore classname="org.apache.slide.store.txfile.TxFileContentStore">
<parameter name="rootpath">store/content</parameter> <!-- chemin physique de stockage des fichiers XML -->
<parameter name="workpath">work/content</parameter> <!-- chemin physique de stockage des fichiers XML -->
</contentstore>
</store>
...
</definition>

Association du store à une URL

<definition>
...
<scope match="/" store="xmlstore"/> <!-- tout ce qui se trouve sous "/" sera associé au store main -->
</definition

Store JNDIPrincipalStore

Le store LDAP (JNDIPrincipalStore) permet de stocker les informations/ressources dans un annuaire LDAP. La configuration de l'annuaire n'est pas explicitée ici. Elle disponible sur le site de Jakarta Slide.

Définition du store dans le fichier Domain.xml

<store name="ldapstore">
<nodestore classname="org.apache.slide.store.txjndi.JNDIPrincipalStore">
<!-- See javadoc for JNDIPrincipalStore for description of parameters -->
<parameter name="cache.refresh.checkrate">15</parameter>
<parameter name="cache.refresh.rate">600</parameter>
<parameter name="cache.refresh.threshold">500</parameter>
<!-- baseDN -->
<parameter name="jndi.container">ou=XXXX,dc=XXXX,dc=XXXX</parameter>
<!-- attribut unique représentant l'utilisateur/roles dans l'annuaire -->
<parameter name="jndi.attributes.rdn">uid</parameter>
<!-- filtre LDAP -->
<parameter name="jndi.search.filter">(objectClass=*)</parameter>
<!-- scope de la recherche --><!-- SUBTREE_SCOPE | ONELEVEL_SCOPE | OBJECT_SCOPE-->
<parameter name="jndi.search.scope">SUBTREE_SCOPE</parameter>
<!-- liste d'attributs à récupérer de l'anuaire -->
<parameter name="jndi.search.attributes">uid,phoneNumber</parameter>
<!-- URL de l'annuaire LDAP-->
<parameter name="java.naming.provider.url">ldap://ldapURL:389</parameter>
<parameter name="java.naming.factory.initial">com.sun.jndi.ldap.LdapCtxFactory</parameter>
<!-- Paramètres d'authentification -->
<parameter name="java.naming.security.principal"></parameter>
<parameter name="java.naming.security.authentication">simple</parameter>
<parameter name="java.naming.security.credentials"></parameter>
</nodestore>
<securitystore>
<reference store="nodestore"/>
</securitystore>
<lockstore>
<reference store="nodestore"/>
</lockstore>
<revisiondescriptorsstore>
<reference store="nodestore"/>
</revisiondescriptorsstore>
<revisiondescriptorstore>
<reference store="nodestore"/>
</revisiondescriptorstore>
<contentstore>
<reference store="nodestore"/>
</contentstore>
</store>

Association du store à une URL

<definition>
...
<scope match="/users" store="ldapstore"/> <!-- tout ce qui se trouve sous "/users" sera associé au store ldapstore -->
</definition>

Notes

Les store LDAP peut être utilisé pour la gestion des utilisateurs et roles mais en aucun cas pour le stockage de fichiers.

Store MySqlRDBMSAdapter

Le store MySql (MySqlRDBMSAdapter) permet de stocker les informations/ressources dans une base MySql. La configuration de la base n'est pas explicitée ici. Elle disponible sur le site de Jakarta Slide.

Définition du store dans le fichier Domain.xml

<store name="mysqlstore">
<nodestore classname="org.apache.slide.store.impl.rdbms.JDBCStore">
<parameter name="adapter">org.apache.slide.store.impl.rdbms.MySqlRDBMSAdapter</parameter>
<parameter name="driver">com.mysql.jdbc.Driver</parameter>
<!-- URL de la base de données -->
<parameter name="url">jdbc:mysql://####/slidebase</parameter>
<!-- Paramètres d'authentification -->
<parameter name="user">connectionLogin</parameter>
<parameter name="password">connectionPassword</parameter>
<parameter name="dbcpPooling">true</parameter>
<parameter name="maxPooledConnections">10</parameter>
<parameter name="isolation">SERIALIZABLE</parameter>
<parameter name="compress">false</parameter>
</nodestore>
<contentstore>
<reference store="nodestore" />
</contentstore>
<securitystore>
<reference store="nodestore" />
</securitystore>
<lockstore>
<reference store="nodestore" />
</lockstore>
<revisiondescriptorsstore>
<reference store="nodestore" />
</revisiondescriptorsstore>
<revisiondescriptorstore>
<reference store="nodestore" />
</revisiondescriptorstore>
</store>

Association du store à une URL

<definition>
...
<scope match="/roles" store="mysqlstore"/> <!-- tout ce qui se trouve sous "/roles" sera associé au store mysqlstore -->
</definition>

Positionnement des droits d'accès par défaut

On peut positionner des droits par defaut sur des ressources sur serveur. Les droits sont positionné pour des utilisateurs ou groupes d'utilisateurs.

Structure de l'entrée dans le fichier Domain.xml

<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/">
<!--
=========================================
1. A l'URL "/" on associe des permissions
=========================================
-->
<permission action="/actions/action1" subject="XXXX" inheritable="true|false" negative="true|false"/>
<permission action="/actions/action2" subject="XXXX" inheritable="true|false" negative="true|false"/>
...

<!--
=========================================
2. On défini un sous répertoire "subDir1"
=========================================
-->
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/subDir1">
<!--
==========================================================================
1. On défini les éléments par défaut de /subDir1 ainsi que les permissions
==========================================================================
-->
<revision>
<property name="XXXX"><![CDATA[<D:href xmlns:D='DAV:'>XXXX</D:href>]]></property>
</revision>
<permission action="/actions/action3" subject="XXXX" inheritable="true|false" negative="true|false"/>
<permission action="/actions/action3" subject="XXXX" inheritable="true|false" negative="true|false"/>
...

<!--
========================================================
2. On défini un sous sous répertoire "subsubDir1" etc...
========================================================
-->
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/subsubDir1">
... et ainsi de suite ...
</objectnode>
</objectnode>
....
</objectnode>

A une URL (<objectnode>) sont associés :

Exemple

 <objectnode classname="org.apache.slide.structure.SubjectNode" uri="/">

<!--
==================================================================================
1.
On défini les permissions sur l'URL "/" :
> les membres du rôle "root" ont tous les droits
> tout le monde peut lire/écrire des ACL et verouiller/déverouiller des ressources
==================================================================================
-->
<permission action="all" subject="/roles/root" inheritable="true"/>
<permission action="/actions/read-acl" subject="all" inheritable="true" negative="true"/>
<permission action="/actions/write-acl" subject="all" inheritable="true" negative="true"/>
<permission action="/actions/unlock" subject="all" inheritable="true" negative="true"/>
<permission action="/actions/read" subject="all" inheritable="true"/>

<!--
====================================
2.
On défini un sous répertoire "users"
====================================
-->
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/users">
<!--
=====================================================
1.
On défini les permissions sur l'URL "/users" :
> les membres du rôle "projector" ont tous les droits
> les personnes non authentifiées n'ont aucun droit
=====================================================
-->
<permission action="all" subject="/roles/projector" inheritable="true"/>
<permission action="all" subject="unauthenticated" inheritable="true" negative="true"/>

<!--
============================================================================
2.
On défini les éléments par défaut de /users donc les utilisateurs par défaut
============================================================================
-->
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/users/root">
<revision>
<property namespace="http://jakarta.apache.org/slide/" name="password">root</property>
</revision>
</objectnode>
<!-- /users/john and /users/john2 represent authenticated users -->
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/users/john">
<revision>
<property namespace="http://jakarta.apache.org/slide/" name="password">john</property>
</revision>
</objectnode>
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/users/john2">
<revision>
<property namespace="http://jakarta.apache.org/slide/" name="password">john2</property>
</revision>
</objectnode>
<!-- /users/guest represents an authenticated or unauthenticated guest user -->
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/users/guest">
<revision>
<property namespace="http://jakarta.apache.org/slide/" name="password">guest</property>
</revision>
</objectnode>
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/users/projector">
<revision>
<property namespace="http://jakarta.apache.org/slide/" name="password">projector</property>
</revision>
</objectnode>
</objectnode>

<!--
====================================
3.
On défini un sous répertoire "roles"
====================================
-->
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/roles">
<!--
============================================
1.
On défini les permissions sur l'URL "/roles"
============================================
-->
<permission action="all" subject="self" inheritable="true"/>
<permission action="all" subject="/roles/projector" inheritable="true"/>
<permission action="all" subject="unauthenticated" inheritable="true" negative="true"/>
<!--
========================================================================================================
2.
On défini les éléments par défaut de /roles donc les roles par défaut ainsi que les membres de ces rôles
========================================================================================================
-->
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/roles/root">
<!--
===============================================================
L'utilisateurs /users/root fait parti du rôle root (/role/root)
===============================================================
-->
<revision>
<property name="group-member-set"><![CDATA[<D:href xmlns:D='DAV:'>/users/root</D:href>]]></property>
</revision>
</objectnode>
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/roles/user">
<revision>
<property name="group-member-set"><![CDATA[<D:href xmlns:D='DAV:'>/users/john</D:href><D:href xmlns:D='DAV:'>/users/john2</D:href><D:href xmlns:D='DAV:'>/users/root</D:href><D:href xmlns:D='DAV:'>/users/projector</D:href>]]></property>
</revision>
</objectnode>
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/roles/guest">
<revision>
<property name="group-member-set"><![CDATA[<D:href xmlns:D='DAV:'>/users/guest</D:href>]]></property>
</revision>
</objectnode>
...
<!--
====================================
3.
On défini un sous répertoire "roles"
====================================
-->
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/files">
<permission action="all" subject="unauthenticated" inheritable="true"/>
<permission action="/actions/write" subject="/roles/user" inheritable="true"/>
<permission action="/actions/read-acl" subject="owner" inheritable="true"/>
</objectnode>
...

</objectnode>