Il peut être intéressant de vouloir basculer un wiki en lecture seule, c'est-à-dire
rendre impossible toute modification sur quelque page que ce soit.
Cette fonctionnalité peut être intéressante dans les cas suivants :
- mise en lecture seule temporaire en cas de vandalisme répété (cas rare, encore jamais observé ici-même) ; notons que le vandalisme peut être manuel mais aussi automatisé via des robots (la programmation de tels robots n'est pas triviale mais néanmoins possible)
- mise en lecture seule temporaire en cas de vacance de l'administrateur technique du site
- mise en lecture seule définitive dans le cas d'un wiki dont les contenus n'ont plus à être modifié mais qui reste publié à titre d'archives : projet terminé ou avorté, etc.
Cette fonctionnalité ne correspond pas à l'esprit classique d'un wiki mais elle peut intéresser plus d'un utilisateur. Elle peut aussi contribuer à rassurer les plus frileux, en leur montrant qu'il est toujours possible d'avoir la main sur le site et qu'un wiki n'est pas un navire sans capitaine.
Discussions
Spécifications (synthèse des discussions) :
- la mise en oeuvre n'est possible que par l'administrateur technique
- la mise en oeuvre est manuelle ; le retour à la normale est manuel
- l'intégralité du wiki est bloqué en une seule fois
- il faut prévoir une signalisation de cet état d'indisposition
Solutions
Voici un petit hack relativement propre et efficace. Je ne sais pas si c'est la meilleure solution mais elle fonctionne très bien et utilise fort peu de code.
Il s'agit de modifier le fichier /handler/page/edit.php de la manière suivante :
<div class="page">
<?php
// ------ Ajouts --------
// check for readonly wiki (except for admin)
if ($this->GetConfigValue("read_only") == "1" && $this->GetConfigValue("admin") != $this->GetUserName())
{
$msg = $this->GetConfigValue("ReadOnlyExceptForAdminMessage");
$error = $msg ? $this->format($msg) :
"ALERTE : ce wiki est actuellement en lecture seule.\n";
}
// check for readonly wiki (except for trusted user)
$array_auth = split(",", $this->GetConfigValue("trusted_users"));
if($this->GetConfigValue("read_only") == "2" && !in_array($this->GetUserName(), $array_auth) && $this->GetConfigValue("admin") != $this->GetUserName())
{
$msg = $this->GetConfigValue("ReadOnlyExceptForTrustedUserMessage");
$error = $msg ? $this->format($msg) :
"ALERTE : ce wiki est actuellement en lecture seule et ne peut être modifié que par des " .
"utilisateurs agréés.\n";
}
// check for readonly for unregistred user
if ($this->GetConfigValue("read_only") == "3" && $this->GetUser() == "")
{
$msg = $this->GetConfigValue("ReadOnlyExceptForRegistredUserMessage");
$error = $msg ? $this->format($msg) :
"ALERTE : ce wiki ne peut être modifié que par des utilisateurs duement enregistrés.\n";
}
// ------ fin des ajouts --------
?>
Le paramétrage du blocage est effectué via le fichier le fichier de configuration wakka.config.php :
- pour un blocage de tout le wiki sauf pour l'admin : ajouter le paramètre "read_only" => "1"
- pour un blocage de tout le wiki sauf pour les utilisateurs agréés : ajouter le paramètre "read_only" => "2"
- pour un blocage de tout le wiki sauf pour les utilisateurs enregistrés : ajouter le paramètres "read_only" => "3"
- on peut également, de façon optionnelle, introduire le paramètre "admin" => "CharlesNepote" pour qu'un admin puisse faire des modifs pendant le blocage
- l'option "2" nécessite de définir des utilisateurs agréés : ajouter le paramètre "trusted_users" => "CharlesNepote,LordFarquaad"
- on peut optionnellement spécifier un message personnalisé pour l'option "1" : "ReadOnlyExceptForAdminMessage??" => "Votre message"
- on peut optionnellement spécifier un message personnalisé pour l'option "2" : "ReadOnlyExceptForTrustedUserMessage??" => "Votre message"
- on peut optionnellement spécifier un message personnalisé pour l'option "3" : "ReadOnlyExceptForRegistredUserMessage??" => "Votre message"
Cette solution est compatible avec
WikiNi 0.4 et 0.5.
Je propose d'intégrer cette solution qui est simple et bigrement efficace en cas d'attaque massive, en attendant de trouver mieux.
--
CharlesNepote
Une autre solution pourrait être d'ajouter une colonne read_only aux pages, ce qui permettrait de faire ce bloquage en écriture par page (par exemple tout le site sauf le
BacASable, ou encore uniquement les docs terminées, ...)... --
ProgFou
Une autre solution que j'avais proposée consistait à combiner les
DiscussionsGroupesDUtilisateurs et l'
InterfaceDAdministrationWikiNi afin d'interdire l'accès au
HandlerEdit? (ou de le restreindre à un groupe d'utilisateurs). De cette façon il serait impossible d'éditer les pages si on ne fait pas partie de ce groupe. Une fois que le wiki peut redevenir accessible à tous, il suffirait de rétablir le droit d'accès au
HandlerEdit? à sa valeur initiale (pour être consistant avec les acls des pages: *)--
LordFarquaad
FiloNet vous propose sa solution :
Utilisation d'un deuxieme compte qui n'aurait des droits qu'en lecture seule. Un parametre red_only=yes permettrait à wikini de changer de chaine de connexion. C'est un peu radical mais bon, quand on peut le faire - cas de la plupart des sites - pourquoi pas ?