diff --git a/ecrire/inc/autoriser.php b/ecrire/inc/autoriser.php
index a49174f6d90d4752b367e25956e269575a6bfb99..10ede0c038ed0a4b6f5eed5e55cfa98a77bb1e26 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 a33d0e4fea6631962881ad714b342bae0f026c84..d5999759180ba9b71fae2241197870a2daf9eea7 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;