Mise en place de votre propre driver
- déclarer votre driver dans le fichier ecrire/mes_options.php3 en y ajoutant ce code
<?php
...
$GLOBALS['type_authorization'] = "mes_autorisations";
...
?>
- créer un répertoire sous ecrire/include/authorization, appelons le mes_autorisations
- copier les fichier suivants dans ce répertoire : ActionDB_common.php et publierArticle_common.php
- renommer ces fichiers en changeant le common en mes_autorisations
- dans le fichier publierArticle_mes_autorisations.php, changer le nom de la classe par publierArticle_mes_autorisations :
<?php
// ...
class publierArticle_mes_autorisations extends Action { }
// ...
?>
Configuration de ce driver
Il faut tout d’abord permettre, de base, aux rédacteurs de publier des articles. Pour cela, dans le fichier ActionDB_mes_autorisations, positionner le poids de l’action publierArticle à 2 :
<?php
// ...
$actiondb["publierArticle"]=2;
// ...
?>
Purger ensuite le cache des autorisations en effaçant les fichiers ecrire/data/auth_*.php.
Il faut maintenant insérer le code suivant dans le fichier publierArticle_mes_autorisations.php :
<?php
//
// +----------------------------------------------------------------------+
// | Copyright (c) 2005 Clever Age |
// +----------------------------------------------------------------------+
// | Author: Olivier Mansour
// +----------------------------------------------------------------------+
//
// Base class for Action "publierArticle".
//
require_once dirname(__FILE__)."/../Action.php";
require_once dirname(__FILE__)."/../../bd/inc_article_factory.php";
class publierArticle_mes_autorisations extends Action {
function _isAuthorized() {
// recuperation de la rubrique
$articleMetier = recuperer_instance_article();
$articleMetier->load($this->_parameters['id_article']);
if ($articleMetier->getRubriqueId() == 1 ) return true; // je suis dans la rubrique 1, c'est bon
// seul les webmestres peuvent publier
$profilMetier = &recuperer_instance_profil();
$monProfil = $profilMetier->getProfilForIntitule('item_webmestre');
if($this->_user->getProfil() >= $monProfil->getPoids()) return true;
return false;
}
}
?>
Ce code va permettre de reproduire la logique métier sur les rubriques dont l’ID est différent de 1.
Pour aller plus loin
On aurait pu, par exemple, ce baser sur la présence d’un mot clé attaché à la rubrique, pour déterminer si les articles y étant associé peuvent être mis en ligne par les rédacteurs. On aurait également pu chercher dans la hierarchie de la rubrique etc ...
Conclusion
Le système d’autorisation mis en place, sous réserve de la création d’un peu de code, permet de re-programmer toutes les actions possibles à sa guise sans altérer le code de SPIP-Agora.
Il n’est pas parfait et ne demande qu’a être amélioré ! ! !