From f766a4ced0d78e19b94d6ebf2059773ece837f1e Mon Sep 17 00:00:00 2001 From: Fil <fil@rezo.net> Date: Sun, 15 Jul 2007 18:43:25 +0000 Subject: [PATCH] l'autorisation d'editer un document, c'est un beau melange de choses compliquees... si on n'avait deja qu'une seule et unique table de jointure pour trouver nos liens on gagnerait du temps, a revoir --- ecrire/inc/autoriser.php | 41 ++++++++++++++++++++++++++++++++++++++++ ecrire/inc/utils.php | 2 ++ 2 files changed, 43 insertions(+) diff --git a/ecrire/inc/autoriser.php b/ecrire/inc/autoriser.php index a49174f6d9..10ede0c038 100644 --- a/ecrire/inc/autoriser.php +++ b/ecrire/inc/autoriser.php @@ -213,6 +213,47 @@ function autoriser_joindredocument_dist($faire, $type, $id, $qui, $opt){ AND autoriser('ecrire', $type, $id, $qui, $opt) ); } + +// On ne peut modifier un document que s'il est lie a un objet qu'on a le droit +// d'editer *et* qu'il n'est pas lie a un objet qu'on n'a pas le droit d'editer +// http://doc.spip.org/@autoriser_document_modifier_dist +function autoriser_document_modifier_dist($faire, $type, $id, $qui, $opt){ + static $m = array(); + + if ($qui['statut'] == '0minirezo' + AND !$qui['restreint']) + return true; + + if (!isset($m[$id])) { + $interdit = false; + $vu = true; + include_spip('public/interfaces'); + $jointures = array_diff( + $GLOBALS['tables_jointures']['spip_documents'], + array('types_documents', 'mots') + ); + foreach($jointures as $j) { + $type = preg_replace(',s?_?documents?_?|s$,', '', $j); + $id_table = id_table_objet($type); + $s = spip_query("SELECT $id_table FROM spip_$j WHERE id_document="._q($id)); + while ($t = spip_fetch_array($s)) { + spip_log($t); + if (autoriser('modifier', $type, $t[$id_table], $qui, $opt)) { + $vu = true; + } + else { + $interdit = true; + break 2; + } + } + } + $m[$id] = ($vu && !$interdit); + } + + return $m[$id]; +} + + // Autoriser a modifier la breve $id // = admins & redac si la breve n'est pas publiee // = admins de rubrique parente si publiee diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php index a33d0e4fea..d599975918 100644 --- a/ecrire/inc/utils.php +++ b/ecrire/inc/utils.php @@ -489,6 +489,8 @@ function id_table_objet($type) { return 'id_document'; else if ($type == 'petition') return 'id_article'; + else if ($type == 'type') + return 'extension'; else { $t = "spip_".table_objet($type); global $tables_principales; -- GitLab