Samx Here
n1udSecurity


Server : Apache
System : Linux ks5.tuic.fr 6.1.0-18-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.76-1 (2024-02-01) x86_64
User : pragmatice ( 1003)
PHP Version : 8.2.24
Disable Function : NONE
Directory :  /home/pragmatice/public_html/lesite/plugins/autorite/inc/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/pragmatice/public_html/lesite/plugins/autorite/inc/autoriser.php
<?php

// Ceci est une surcharge de inc/autoriser.php
//
// Voir le fichier formulaires/configurer_autorite.html pour la definition des reglages

if (!defined("_ECRIRE_INC_VERSION")){
	return;
}

if (!defined('_DEBUG_AUTORISER')){
	define('_DEBUG_AUTORISER', false);
}


$GLOBALS['autorite'] = [];
if (!empty($GLOBALS['meta']['autorite'])) {
	$GLOBALS['autorite'] = unserialize($GLOBALS['meta']['autorite']);
}

$GLOBALS['autorite'] = ($GLOBALS['autorite'] ?: []);
$autorite_erreurs = [];

//
// Les DEFINE
//
if (isset($GLOBALS['autorite']['statut_auteur_creation'])){
	if (defined('_STATUT_AUTEUR_CREATION')){
		$autorite_erreurs[] = 'statut_auteur_creation';
	} else {
		switch ($GLOBALS['autorite']['statut_auteur_creation']) {
			case 'visiteur':
				if (!defined('_STATUT_AUTEUR_CREATION')){
					define('_STATUT_AUTEUR_CREATION', '6forum');
				}
				break;
			case 'redacteur':
				if (!defined('_STATUT_AUTEUR_CREATION')){
					define('_STATUT_AUTEUR_CREATION', '1comite');
				}
				break;
			case 'admin':
				if (!defined('_STATUT_AUTEUR_CREATION')){
					define('_STATUT_AUTEUR_CREATION', '0minirezo');
				}
				break;
		}
	}
}

if (isset($GLOBALS['autorite']['statut_auteur_rubrique'])){
	if (defined('_STATUT_AUTEUR_RUBRIQUE')){
		$autorite_erreurs[] = 'statut_auteur_rubrique';
	} else {
		switch ($GLOBALS['autorite']['statut_auteur_rubrique']) {
			case '1':
				if (!defined('_STATUT_AUTEUR_RUBRIQUE')){
					define('_STATUT_AUTEUR_RUBRIQUE', '0minirezo,1comite');
				}
				break;
			case '2':
				if (!defined('_STATUT_AUTEUR_RUBRIQUE')){
					define('_STATUT_AUTEUR_RUBRIQUE', '0minirezo,1comite,6forum');
				}
				break;
		}
	}
}

if (isset($GLOBALS['autorite']['statut_ignorer_admins_restreints']) and $GLOBALS['autorite']['statut_ignorer_admins_restreints']=='oui'){
	if (defined('_ADMINS_RESTREINTS')){
		$autorite_erreurs[] = 'ignorer_admins_restreints';
	} else {
		define('_ADMINS_RESTREINTS', false);
	}
}


// Charger les versions *_dist des fonctions
include_once _DIR_RESTREINT . 'inc/autoriser.php';
// si ca n'a pas ete fait et que l'on est dans une version ancienne de spip
// definir _ID_WEBMESTRES
// ceci semble inutile a partir de spip 3.2


//
// Les FONCTIONS
//

##
## une fonction qui gere les droits publieurs
##

if (isset($GLOBALS['autorite']['espace_publieur'])){
	if (!function_exists('autorisation_publie_visiteur')){
		function autorisation_publie_visiteur($qui, $id_secteur){
			// espace publieur est un array(secteur1, secteur2), ou un id_secteur
			if (
				(is_array($GLOBALS['autorite']['espace_publieur'])
					and !in_array($id_secteur, $GLOBALS['autorite']['espace_publieur']))
				and
				$id_secteur!=$GLOBALS['autorite']['espace_publieur']
			){
				return false;
			}

			switch ($qui['statut']) {
				case '0minirezo':
					break;
				case '1comite':
					if (isset($GLOBALS['autorite']['espace_publieur_redacteurs'])){
						return true;
					}
					break;
				case '6forum':
					if (isset($GLOBALS['autorite']['espace_publieur_visiteurs'])){
						return true;
					}
					break;
			}
			return false;
		}
	} else {
		$autorite_erreurs[] = 'autorisation_publie_visiteur';
	}
}

##
## une fonction qui gere les droits wiki
##
if (isset($GLOBALS['autorite']['espace_wiki'])){
	if (!function_exists('autorisation_wiki_visiteur')){
		function autorisation_wiki_visiteur($qui, $id_secteur){
			// espace_wiki est un array(secteur1, secteur2), ou un id_secteur
			if (
				(is_array($GLOBALS['autorite']['espace_wiki'])
					and !in_array($id_secteur, $GLOBALS['autorite']['espace_wiki']))
				and
				$id_secteur!=$GLOBALS['autorite']['espace_wiki']
			){
				return false;
			}

			switch ($qui['statut']) {
				case '0minirezo':
				case '1comite':
					if (isset($GLOBALS['autorite']['espace_wiki_redacteurs'])){
						return true;
					}
					break;
				case '6forum':
					if (isset($GLOBALS['autorite']['espace_wiki_visiteurs'])){
						return true;
					}
					break;
				default:
					if (isset($GLOBALS['autorite']['espace_wiki_anonyme'])){
						return true;
					}
					break;
			}
			return false;
		}
	} else {
		$autorite_erreurs[] = 'autorisation_wiki_visiteur';
	}
}


##
## une fonction qui gere les droits wiki par mot clef
##
if (isset($GLOBALS['autorite']['espace_wiki_motsclef'])){
	if (!function_exists('autorisation_wiki_motsclef_visiteur')){
		function autorisation_wiki_motsclef_visiteur($qui, $id_article){

			//determine les mots clef affectés à l'article
			$array_mot = sql_allfetsel('id_mot', 'spip_mots_liens', "objet='article' AND id_objet=" . intval($id_article));
			$array_mot = array_column($array_mot, 'id_mot');

			//aucun mot clef d'affecté à l'article, rien à faire
			if (!$array_mot){
				return false;
			}

			//vérification que l'article possède un mot clef correspondant au staut du visiteur
			switch ($qui['statut']) {
				case '0minirezo':
				case '1comite':
					if (in_array($GLOBALS['autorite']['espace_wiki_motsclef_redacteurs'], $array_mot)){
						return true;
					}
					break;
				case '6forum':
					if (in_array($GLOBALS['autorite']['espace_wiki_motsclef_visiteurs'], $array_mot)){
						return true;
					}
					break;
				default:
					if (in_array($GLOBALS['autorite']['espace_wiki_motsclef_anonyme'], $array_mot)){
						return true;
					}
					break;
			}
			return false;
		}
	} else {
		$autorite_erreurs[] = 'autorisation_wiki_motsclef_visiteur';
	}
}


##
## autoriser_article_modifier
##
if (
	isset($GLOBALS['autorite']['auteur_mod_article'])
	or isset($GLOBALS['autorite']['espace_wiki'])
	or isset($GLOBALS['autorite']['espace_wiki_motsclef'])
	or isset($GLOBALS['autorite']['redacteur_mod_article'])
	or false // autre possibilite de surcharge ?
){
	if (!function_exists('autoriser_article_modifier')){
		function autoriser_article_modifier($faire, $type, $id, $qui, $opt){

			$r = sql_fetsel("id_rubrique,id_secteur,statut", "spip_articles", "id_article=" . intval($id));
			if (!$r) {
				return false;
			}
			include_spip('inc/auth');
			$a = false;
			if (!isset($GLOBALS['autorite']['espace_publieur'])){
				$a = autoriser('publierdans', 'rubrique', $r['id_rubrique'], $qui, $opt);
			} else {
				if (!in_array($qui['statut'], array('1comite', '6forum'))){
					$a = autoriser('publierdans', 'rubrique', $r['id_rubrique'], $qui, $opt);
				}
			}
			return
				$a
				or (
					// Cas du wiki, on appelle la fonction qui verifie les droits wiki
					isset($GLOBALS['autorite']['espace_wiki']) and $GLOBALS['autorite']['espace_wiki']
					and autorisation_wiki_visiteur($qui, $r['id_secteur'])
				)
				or (
					// Cas du wiki par mot clefs, on appelle la fonction qui verifie les droits wiki
					isset($GLOBALS['autorite']['espace_wiki_motsclef']) and $GLOBALS['autorite']['espace_wiki_motsclef']
					and autorisation_wiki_motsclef_visiteur($qui, _q($id))
				)
				or (
					// auteur autorise a modifier son article
					// (sauf si l'article est refuse ou l'auteur mis a la poubelle)
					isset($GLOBALS['autorite']['auteur_mod_article']) and $GLOBALS['autorite']['auteur_mod_article']
					and in_array($qui['statut'],
						array('0minirezo', '1comite', '6forum'))
					and in_array($r['statut'],
						array('publie', 'prop', 'prepa', 'poubelle'))
					and sql_countsel("spip_auteurs_liens", "objet='article' AND id_objet=" . intval($id) . " AND id_auteur=" . intval($qui['id_auteur']))
				)
				or (
					// un redacteur peut-il modifier un article propose ?
					isset($GLOBALS['autorite']['redacteur_mod_article']) and $GLOBALS['autorite']['redacteur_mod_article']
					and in_array($qui['statut'], array('0minirezo', '1comite'))
					and $r['statut']=='prop'
				)
				or (
					// un auteur peut modifier son propre article lorsqu'il est proposé ou en cours de rédaction
					in_array($qui['statut'], array('0minirezo', '1comite'))
					and in_array($r['statut'], array('prop', 'prepa'))
					and sql_countsel("spip_auteurs_liens", "objet='article' AND id_objet=" . intval($id) . " AND id_auteur=" . intval($qui['id_auteur']))
				);
		}

		if (!function_exists('autoriser_rubrique_creerarticledans')){
			function autoriser_rubrique_creerarticledans($faire, $type, $id, $qui, $opt){
				return autoriser_voir_dist($faire, $type, $id, $qui, $opt);
			}
		}
	} else {
		$autorite_erreurs[] = 'autoriser_article_modifier';
	}
}


##
## autoriser_rubrique_publierdans
##
if (
	isset($GLOBALS['autorite']['espace_wiki'])
	or isset($GLOBALS['autorite']['publierdans'])
	or false // autre possibilite de surcharge ?
){
	if (!function_exists('autoriser_rubrique_publierdans')){
		function autoriser_rubrique_publierdans($faire, $type, $id, $qui, $opt){

			// Si on est deja autorise en standard, dire 'OK'
			if (
				!isset($GLOBALS['autorite']['publierdans'])
				&& autoriser_rubrique_publierdans_dist($faire, $type, $id, $qui, $opt)
			){
				return true;
			}

			// Verifions qui a le droit
			// 1 : webmestre
			// 2 : admin complet
			// 4 : admin restreint
			// 8 : redacteur
			// cas du redacteur : attention, il faut verifier
			// aussi qu'il est l'auteur de l'objet publie...

			if (($GLOBALS['autorite']['publierdans'] & 1)
				&& autoriser('webmestre', $type, $id, $qui, $opt)){
				return true;
			}
			if (($GLOBALS['autorite']['publierdans'] & 2)
				&& ($qui['statut']=='0minirezo')
				&& (!$qui['restreint'])){
				return true;
			}
			if (($GLOBALS['autorite']['publierdans'] & 4)
				&& ($qui['statut']=='0minirezo')
				&& ($qui['restreint'] and $id and in_array($id, $qui['restreint']))){
				return true;
			}
			// Vérifier que le rédacteur·trice est bien l'auteur·e de l'objet
			if (($GLOBALS['autorite']['publierdans'] & 8)
				&& ($qui['statut']=='1comite')){

				// qui demande le changement de statut ?
				$id_auteur = $qui['id_auteur'];

				// changement pour quel type d'objet?
				$objet = _request('exec');
				$cle_primaire = id_table_objet($objet);
				$id_objet = _request($cle_primaire);

				//  qui est l'auteur de l'objet ?
				$id_auteur_objet = sql_getfetsel('id_auteur', 'spip_auteurs_liens', "objet =" . sql_quote($objet) . " AND id_objet =" . intval($id_objet));

				// on peut vérifier maintenant…
				if ($id_auteur==$id_auteur_objet){
					return true;
				}
			}
			// Sinon, verifier si la rubrique est ouverte aux publieurs
			// et si on est bien enregistre
			if (isset($GLOBALS['autorite']['espace_publieur'])){
				$id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($id));
				if (autorisation_publie_visiteur($qui, $id_secteur) and ($qui['statut'])){
					return true;
				}
			}
			// Sinon, verifier si la rubrique est wiki
			// et si on est bien enregistre (sauf cas de creation anonyme explicitement autorisee)
			if (isset($GLOBALS['autorite']['espace_wiki'])){
				$id_secteur = sql_getfetsel('id_secteur', 'spip_rubriques', 'id_rubrique=' . intval($id));
				if (autorisation_wiki_visiteur($qui, $id_secteur)
					and (
						isset($GLOBALS['autorite']['espace_wiki_rubrique_anonyme'])
						or $qui['statut']
					)){
					return true;
				}
			}

			// par defaut, NIET
			return false;
		}
	} else {
		$autorite_erreurs[] = 'autoriser_rubrique_publierdans';
	}
}


##
## autoriser_rubrique_creerrubriquedans
##
if (
	isset($GLOBALS['autorite']['interdire_creer_secteur'])
	or isset($GLOBALS['autorite']['interdire_creer_sousrub'])
	or false // autre possibilite de surcharge ?
){
	if (!function_exists('autoriser_rubrique_creerrubriquedans')){
		function autoriser_rubrique_creerrubriquedans($faire, $type, $id, $qui, $opt){
			if ($id==0
				and isset($GLOBALS['autorite']['interdire_creer_secteur'])){
				return
					$GLOBALS['autorite']['interdire_creer_rub_sauf_webmestre']
					and autoriser('webmestre');
			}

			if ($id!=0
				and isset($GLOBALS['autorite']['interdire_creer_sousrub'])){
				return
					$GLOBALS['autorite']['interdire_creer_rub_sauf_webmestre']
					and autoriser('webmestre');
			}

			return
				autoriser_rubrique_creerrubriquedans_dist($faire, $type, $id, $qui, $opt);
		}
	} else {
		$autorite_erreurs[] = 'autoriser_rubrique_creerrubriquedans';
	}
}


##
## autoriser_auteur_modifier
##
if (
	isset($GLOBALS['autorite']['auteur_mod_email']) and (empty($GLOBALS['autorite']['auteur_mod_email']))
){
	if (!function_exists('autoriser_auteur_modifier')){
		function autoriser_auteur_modifier($faire, $type, $id, $qui, $opt){
			if (isset($opt['email'])
				and !empty($GLOBALS['visiteur_session']['id_auteur'])
				and $qui['id_auteur'] === $GLOBALS['visiteur_session']['id_auteur']
				and intval($GLOBALS['visiteur_session']['statut'] !== '0minirezo')
			){
				return false;
			}
			return autoriser_auteur_modifier_dist($faire, $type, $id, $qui, $opt);
		}
	} else {
		$autorite_erreurs[] = 'autoriser_auteur_modifier';
	}
}


##
## autoriser_modererforum
##
if (!function_exists('autoriser_modererforum')){
	function autoriser_modererforum($faire, $type, $id, $qui, $opt){
		return
			($qui['statut']=='0minirezo')
			or (
				$GLOBALS['autorite']['auteur_modere_forum'] ?? null
				and $type=='article'
				and in_array($qui['statut'], array('0minirezo', '1comite'))
				and sql_countsel("spip_auteurs_liens", "objet='article' AND id_objet=" . intval($id) . " AND id_auteur=" . intval($qui['id_auteur']))
			);
	}
}

##
## autoriser_modererpetition
##
if (!function_exists('autoriser_modererpetition')){
	function autoriser_modererpetition($faire, $type, $id, $qui, $opt){
		return
			($qui['statut']=='0minirezo')
			or (
				$GLOBALS['autorite']['auteur_modere_petition']
				and $type=='article'
				and in_array($qui['statut'], array('0minirezo', '1comite'))
				and sql_countsel("spip_auteurs_liens", "objet='article' AND id_objet=" . intval($id) . " AND id_auteur=" . intval($qui['id_auteur']))
			);
	}
}

##
## autoriser_voirstats
##
if (
	isset($GLOBALS['autorite']['redacteurs_lire_stats'])
	or false // autre possibilite de surcharge ?
){
	if (!function_exists('autoriser_voirstats')){
		function autoriser_voirstats($faire, $type, $id, $qui, $opt){
			return
				$GLOBALS['autorite']['redacteurs_lire_stats']
					? in_array($qui['statut'], array('0minirezo', '1comite'))
					: $qui['statut']=='0minirezo';
		}
	} else {
		$autorite_erreurs[] = 'autoriser_voirstats';
	}
}

if (!function_exists('autoriser_auteurs_voir')){
	// semble pas testée par spip mais on s'en sert pour les autres
	function autoriser_auteurs_voir($faire, $type, $id, $qui, $opt){
		if (isset($GLOBALS['autorite']['redacteurs_voir_auteurs'])
			and $GLOBALS['autorite']['redacteurs_voir_auteurs']){
			return in_array($qui['statut'], array('0minirezo', '1comite'));
		} else {
			return ($qui['statut']=='0minirezo');
		}
	}
} else {
	$autorite_erreurs[] = 'autoriser_auteurs_voir';
}

if (!function_exists('autoriser_auteurs_menu')){
	// présenter ou non l'entrée "auteurs" dans le menu
	function autoriser_auteurs_menu($faire, $type, $id, $qui, $opt){
		return autoriser_auteurs_voir($faire, $type, $id, $qui, $opt);
	}
} else {
	$autorite_erreurs[] = 'autoriser_auteurs_voir';
}
if (!function_exists('autoriser_auteur_voir')){
	// Accès aux fiches d'infos persos des auteurs
	function autoriser_auteur_voir($faire, $type, $id, $qui, $opt){
		return ($qui['id_auteur']==$id)
			or autoriser_auteurs_voir($faire, $type, $id, $qui, $opt);
	}
} else {
	$autorite_erreurs[] = 'autoriser_auteurs_voir';
}

// Autoriser a modifier un groupe de mots $id
// y compris en ajoutant/modifiant les mots lui appartenant
// https://code.spip.net/@autoriser_groupemots_modifier
##
## autoriser_groupemots_modifier
##
if (
	isset($GLOBALS['autorite']['editer_mots'])
	or false // autre possibilite de surcharge ?
){
	if (!function_exists('autoriser_groupemots_modifier')){
		function autoriser_groupemots_modifier($faire, $type, $id, $qui, $opt){
			return (
					$qui['statut']=='0minirezo'
					and (
						!$qui['restreint']
						or
						$GLOBALS['autorite']['editer_mots']>=1
					)
				) or (
					$qui['statut']=='1comite'
					and $GLOBALS['autorite']['editer_mots']>=2
				);
		}

		# signaler un risque de bug avec un autoriser_mot_modifier personnalise
		if (function_exists('autoriser_mot_modifier')){
			$autorite_erreurs[] = 'autoriser_mot_modifier';
		}

		// la config d'autorite sur le groupe de mot doit être idem sur les mots
		function autoriser_mot_modifier($faire, $type, $id, $qui, $opt){
			return autoriser_groupemots_modifier($faire, $type, $id, $qui, $opt);
		}

		function autoriser_mot_creer($faire, $type, $id, $qui, $opt){
			return autoriser_groupemots_modifier($faire, $type, $id, $qui, $opt);
		}

	} else {
		$autorite_erreurs[] = 'autoriser_groupemots_modifier';
	}
}

##
## Modifier un forum ?
## A noter : il n'existe pas d'interface dans SPIP, il faut utiliser les crayons
## TODO : cookie specialise (voir commentaires dans cfg_autorite.html)
##
if (
	isset($GLOBALS['autorite']['editer_forums'])
	or false // autre possibilite de surcharge ?
){
	if (!function_exists('autoriser_forum_modifier')){
		function autoriser_forum_modifier($faire, $type, $id, $qui, $opt){

			// Le webmestre
			if (isset($GLOBALS['autorite']['editer_forums']) and $GLOBALS['autorite']['editer_forums']>=1
				and autoriser('webmestre', $type, $id, $qui, $opt)){
				return true;
			}

			// Les admins
			if (
				isset($GLOBALS['autorite']['editer_forums'])
				and $GLOBALS['autorite']['editer_forums']>=2
				and $qui['statut']=='0minirezo'
				and !$qui['restreint']
			){
				return true;
			}

			// Les admins restreint pour les articles attachés à une rubrique dont ils sont admins
			if (isset($GLOBALS['autorite']['editer_forums']) and $GLOBALS['autorite']['editer_forums']>=2 and $qui['statut']=='0minirezo'){
				$id = intval($id); // ?
				if (isset($GLOBALS['spip_version_branche']) and intval($GLOBALS['spip_version_branche'])<3){
					$id_rubrique = sql_getfetsel("id_rubrique", "spip_forum", "id_forum=$id");
					if (!$id_rubrique and ($id_article = sql_getfetsel("id_article", "spip_forum", "id_forum=$id"))){
						$id_rubrique = sql_getfetsel("id_rubrique", "spip_articles", "id_article=$id_article");
					}
					if (!$id_rubrique and ($id_breve = sql_getfetsel("id_breve", "spip_forum", "id_forum=$id"))){
						$id_rubrique = sql_getfetsel("id_rubrique", "spip_breves", "id_breve=$id_breve");
					}
				} else {
					$objet = sql_getfetsel("objet", "spip_forum", "id_forum=$id");
					$id_objet = sql_getfetsel("id_objet", "spip_forum", "id_forum=$id AND objet='$objet'");
					if ($objet=="rubrique"){
						$id_rubrique = $id_objet;
					} else {
						if ($objet=="article"){
							$id_rubrique = sql_getfetsel("id_rubrique", "spip_articles", "id_article=$id_objet");
						} else {
							if ($objet=="breve"){
								$id_rubrique = sql_getfetsel("id_rubrique", "spip_breves", "id_breve=$id_objet");
							}
						}
					}
				}
				return ($id_rubrique and in_array($id_rubrique, $qui['restreint']));
			}

			// L'auteur du message (enregistre')
			// 3 = avec une periode de grace d'une heure
			// 4 = ad vitam
			if (
				isset($GLOBALS['autorite']['editer_forums'])
				and $GLOBALS['autorite']['editer_forums']>=3
				and isset($qui['id_auteur'])
			){
				$where = [
					"id_forum=" . intval($id),
					"id_auteur=" . intval($qui['id_auteur'])
				];
				if ($GLOBALS['autorite']['editer_forums']==3){
					$where[] = "date_heure > " . sql_quote(date('Y-m-d H:i:s', strtotime('-1hour')));
				}
				if (sql_countsel('spip_forum', $where)){
					return true;
				}
			}

			// par defaut
			return autoriser_forum_modifier_dist($faire, $type, $id, $qui, $opt);

		}
	} else {
		$autorite_erreurs[] = 'autoriser_forum_modifier';
	}
}

##
## Modifier une signature ?
## A noter : il n'existe pas d'interface dans SPIP, il faut utiliser les crayons
## TODO : cookie specialise (voir commentaires dans cfg_autorite.html)
##
if (
	isset($GLOBALS['autorite']['editer_signatures'])
	or false // autre possibilite de surcharge ?
){
	if (!function_exists('autoriser_signature_modifier')){
		function autoriser_signature_modifier($faire, $type, $id, $qui, $opt){

			// Le webmestre
			if (
				isset($GLOBALS['autorite']['editer_signatures'])
				and $GLOBALS['autorite']['editer_signatures']>=1
				and autoriser('webmestre', $type, $id, $qui, $opt)
			){
				return true;
			}

			// Les admins
			if (
				isset($GLOBALS['autorite']['editer_signatures'])
				and $GLOBALS['autorite']['editer_signatures']>=2
				and $qui['statut']=='0minirezo'
				and !$qui['restreint']
			){
				return true;
			}

			// par defaut
			return autoriser_signature_modifier_dist($faire, $type, $id, $qui, $opt);
		}
	} else {
		$autorite_erreurs[] = 'autoriser_signature_modifier';
	}
}


##
## autoriser_configurer (pages de configuration)
##
if (
	isset($GLOBALS['autorite']['configurer'])
	or isset($GLOBALS['autorite']['configurer_plugin'])
){
	if (!function_exists('autoriser_configurer')){
		function autoriser_configurer($faire, $type, $id, $qui, $opt){
			// TODO:
			// cas particulier : configurer les plugins doit etre bloque
			// en mode 'webmestre', sinon on pourrait desactiver autorite.
			// mais comment faire pour ne pas bloquer quelqu'un qui installe
			// ce plugin alors qu'il est id_auteur > 1 ?
			if (in_array($type, array('plugins', 'admin_plugin'))){
				if (isset($GLOBALS['autorite']['configurer_plugin']) and $GLOBALS['autorite']['configurer_plugin']=='webmestre'){
					return autoriser('webmestre');
				}
			}

			if (isset($GLOBALS['autorite']['configurer']) and $GLOBALS['autorite']['configurer']=='webmestre'){
				return autoriser('webmestre');
			} else {
				return autoriser('x'); // autorisation par defaut
			}
		}
	} else {
		$autorite_erreurs[] = 'autoriser_configurer';
	}
}

##
## autoriser_sauvegarder (faire un backup partiel ou complet)
##
if (
	isset($GLOBALS['autorite']['sauvegarder'])
	or false // autre possibilite de surcharge ?
){
	if (!function_exists('autoriser_sauvegarder')){
		function autoriser_sauvegarder($faire, $type, $id, $qui, $opt){

			if (isset($GLOBALS['autorite']['sauvegarder']) and $GLOBALS['autorite']['sauvegarder']=='webmestre'){
				return autoriser('webmestre');
			}

			// admins y compris restreints
			if (isset($GLOBALS['autorite']['sauvegarder']) and $GLOBALS['autorite']['sauvegarder']=='minirezo'){
				return $qui['statut']=='0minirezo';
			}

			// version normale
			if (
				isset($GLOBALS['autorite']['sauvegarder'])
				and ($GLOBALS['autorite']['sauvegarder']==''
					or $GLOBALS['autorite']['sauvegarder']=='admin') # jusque v0.7 de ce plugin
			){
				return $qui['statut']=='0minirezo' and !$qui['restreint'];
			}
		}
	} else {
		$autorite_erreurs[] = 'autoriser_sauvegarder';
	}
}

##
## autoriser_detruire (vider la base de donnees)
##
if (
	isset($GLOBALS['autorite']['detruire'])
	or false // autre possibilite de surcharge ?
){
	if (!function_exists('autoriser_detruire')){
		function autoriser_detruire($faire, $type, $id, $qui, $opt){

			if (isset($GLOBALS['autorite']['detruire']) and $GLOBALS['autorite']['detruire']=='webmestre'){
				return autoriser('webmestre');
			}

			if (isset($GLOBALS['autorite']['detruire']) and $GLOBALS['autorite']['detruire']=='non'){
				return false;
			}

			// Par defaut, idem configuration
			return autoriser('configurer');
		}
	} else {
		$autorite_erreurs[] = 'autoriser_detruire';
	}
}

##
## autoriser_ecrire
##
if (
	isset($GLOBALS['autorite']['redacteurs_ecrire'])
	or false // autre possibilite de surcharge ?
){
	if (!function_exists('autoriser_ecrire')){
		function autoriser_ecrire($faire, $type, $id, $qui, $opt){
			return
				isset($GLOBALS['autorite']['redacteurs_ecrire'])
					? $qui['statut']=='0minirezo'
					: in_array($qui['statut'], array('0minirezo', '1comite'));
		}
	} else {
		$autorite_erreurs[] = 'autoriser_ecrire';
	}
}


if ($autorite_erreurs){
	$GLOBALS['autorite_erreurs'] = $autorite_erreurs;
}

SAMX