diff --git a/ecrire/exec/articles.php b/ecrire/exec/articles.php
index c8c44a815f47c4c59485e32e166f769e5454a499..e78cfec27c6c6f33709f44c888f48cc15788a4ca 100644
--- a/ecrire/exec/articles.php
+++ b/ecrire/exec/articles.php
@@ -15,6 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 include_spip('inc/presentation');
 include_spip('inc/texte');
 include_spip('inc/actions');
+include_spip('inc/autoriser');
 
 // http://doc.spip.org/@exec_articles_dist
 function exec_articles_dist()
@@ -25,7 +26,8 @@ function exec_articles_dist()
 
 	$row = spip_fetch_array(spip_query("SELECT * FROM spip_articles WHERE id_article=$id_article"));
 
-	if (!$row) {
+	if (!$row
+	OR !autoriser('voir', 'article', $id_article)) {
 		$res = $row['titre'] = _T('public:aucun_article');
 		$row['id_rubrique'] = 0;
 	} else {
@@ -74,11 +76,9 @@ function articles_affiche($id_article, $row, $cherche_auteur, $ids, $cherche_mot
 	
 	$virtuel =  (substr($chapo, 0, 1) == '=')  ? substr($chapo, 1) : '';
 
-	$statut_rubrique = acces_rubrique($id_rubrique);
 
-	$flag_auteur = spip_num_rows(auteurs_article($id_article, " id_auteur=$connect_id_auteur"));
-
-	$flag_editable = ($statut_rubrique OR ($flag_auteur AND ($statut_article == 'prepa' OR $statut_article == 'prop' OR $statut_article == 'poubelle')));
+	$statut_rubrique = autoriser('publier_dans', 'rubrique', $id_rubrique);
+	$flag_editable = autoriser('modifier', 'article', $id_article);
 
 	// Est-ce que quelqu'un a deja ouvert l'article en edition ?
 	if ($flag_editable
@@ -159,7 +159,8 @@ function articles_affiche($id_article, $row, $cherche_auteur, $ids, $cherche_mot
 	. (($spip_display == 4) ? ''
 	 : articles_documents($flag_editable, 'article', $id_article))
 
-	. (($flag_auteur AND  $statut_article == 'prepa' AND !$statut_rubrique) 
+	. (($statut_article == 'prepa' AND !$statut_rubrique
+	AND spip_num_rows(auteurs_article($id_article, " id_auteur=$connect_id_auteur")))
 	 ? $instituer_article($id_article)
 	 : '')
 	. "</div></div>"
@@ -226,7 +227,11 @@ function boite_info_articles($id_article, $statut_article, $visites, $id_version
 	. "</div>\n"
 	  . voir_en_ligne('article', $id_article, $statut_article, 'racine-24.gif', false);
 
-	if ($connect_statut == "0minirezo" AND $statut_article == 'publie' AND $visites > 0 AND $GLOBALS['meta']["activer_statistiques"] != "non" AND $options == "avancees"){
+	if ($statut_article == 'publie'
+	AND $visites > 0
+	AND $GLOBALS['meta']["activer_statistiques"] != "non"
+	AND $options == "avancees"
+	AND autoriser('voir_stats', 'article', $id_article)) {
 		$res .= icone_horizontale(_T('icone_evolution_visites', array('visites' => $visites)), generer_url_ecrire("statistiques_visites","id_article=$id_article"), "statistiques-24.gif","rien.gif", false);
 	}
 
diff --git a/ecrire/exec/articles_versions.php b/ecrire/exec/articles_versions.php
index 7d14d461c2ce709054de009d8982453f463eb238..c7aa1e2df77ebbd574085809a1bbb0e6fec2dcb7 100644
--- a/ecrire/exec/articles_versions.php
+++ b/ecrire/exec/articles_versions.php
@@ -15,6 +15,7 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 
 include_spip('inc/presentation');
 include_spip('inc/revisions');
+include_spip('inc/autoriser');
 
 // http://doc.spip.org/@exec_articles_versions_dist
 function exec_articles_versions_dist()
@@ -43,6 +44,10 @@ function exec_articles_versions_dist()
 // Lire l'article
 //
 
+	if(!autoriser('voir_revisions', 'article', $id_article))
+		return;
+
+
     $id_article = intval($id_article);
     $result = spip_query("SELECT * FROM spip_articles WHERE id_article='$id_article'");
 
@@ -205,15 +210,15 @@ echo "</td>";
 
 echo "<td align='center'>";
 
-// L'article est-il editable ?
- $result_auteur = spip_query("SELECT * FROM spip_auteurs_articles WHERE id_article=$id_article AND id_auteur=$connect_id_auteur");
-
-$flag_auteur = (spip_num_rows($result_auteur) > 0);
-$flag_editable = (acces_rubrique($id_rubrique)
-	OR ($flag_auteur AND ($statut_article == 'prepa' OR $statut_article == 'prop' OR $statut_article == 'poubelle')));
-
-if ($flag_editable)
-	icone(_T('icone_modifier_article').'<br />('._T('version')." $id_version)", generer_url_ecrire("articles_edit","id_article=$id_article&id_version=$id_version"), "article-24.gif", "edit.gif");
+// Icone de modification
+if (autoriser('modifier', 'article', $id_article))
+	icone(
+		_T('icone_modifier_article').'<br />('._T('version')." $id_version)",
+		generer_url_ecrire("articles_edit",
+			"id_article=$id_article&id_version=$id_version"),
+		"article-24.gif",
+		"edit.gif"
+	);
 
 echo "</td>";
 
@@ -328,5 +333,7 @@ fin_cadre_relief();
 
 
 echo fin_page();
+
 }
+
 ?>
diff --git a/ecrire/inc/article_select.php b/ecrire/inc/article_select.php
index ce8649f62ad4cee2ab70d6625bebf7df6aa53f46..c43c963f8e4e195b2eb8cda85a9724deb4b0a42a 100644
--- a/ecrire/inc/article_select.php
+++ b/ecrire/inc/article_select.php
@@ -25,17 +25,13 @@ function article_select($id_article, $id_rubrique, $lier_trad, $new) {
   $id_rubrique =  intval($id_rubrique);
   $lier_trad =  intval($lier_trad);
 
-// ESSAI pour "Joindre un document" depuis l'espace prive (UPLOAD_DIRECT)
-/*if ($GLOBALS['action'] AND $GLOBALS['doc']) {
-	global $action, $doc;
-	if ($var_nom = charger_fonction($action, 'action'))
-		$var_nom($doc);
-	else
-		spip_log("fonction $var_nom indisponible");
-#	return;
-}*/
-
-  if ($id_article) {
+	include_spip('inc/autoriser');
+
+if ($id_article) {
+
+	if (!autoriser('modifier','article',$id_article))
+		return false;
+
 	$result = spip_query("SELECT * FROM spip_articles WHERE id_article=$id_article");
 
 	if ($row = spip_fetch_array($result)) {
@@ -44,11 +40,6 @@ function article_select($id_article, $id_rubrique, $lier_trad, $new) {
 		$id_secteur = $row['id_secteur'];
 		$statut = $row['statut'];
 
-		$result_auteur = spip_query("SELECT * FROM spip_auteurs_articles WHERE id_article=$id_article AND id_auteur=$connect_id_auteur");
-
-		$flag_auteur = (spip_num_rows($result_auteur) > 0);
-
-		$flag_editable = (acces_rubrique($id_rubrique) OR ($flag_auteur > 0 AND ($statut == 'prepa' OR $statut == 'prop' OR $new == 'oui')));
  	}
 }
 else if ($new=='oui') {
@@ -78,10 +69,7 @@ else if ($new=='oui') {
 		$row_rub = spip_fetch_array(spip_query("SELECT id_secteur FROM spip_rubriques WHERE id_rubrique=$id_rubrique"));
 		$row['id_secteur'] = $row_rub['id_secteur'];
 	}
-	$flag_editable = true;
- }
-
-	if (!$flag_editable) return false;
+}
 
 	// marquer le fait que l'article est ouvert en edition par toto a telle date
 	// une alerte sera donnee aux autres redacteurs sur exec=articles
diff --git a/ecrire/inc/autoriser.php b/ecrire/inc/autoriser.php
index e26478bfef6f77e7d215491a5903bccc55552b7b..ce39bcf49cfb2a08ee5f56b99c3acaca8d359b0b 100644
--- a/ecrire/inc/autoriser.php
+++ b/ecrire/inc/autoriser.php
@@ -74,7 +74,7 @@ function autoriser($faire, $type='', $id=0, $qui = NULL, $opt = NULL) {
 		AND (function_exists($f) OR function_exists($f.='_dist'))
 		)
 	)
-		$a = $f($faire,$type,$id,$qui,$opt);
+		$a = $f($faire,$type,intval($id),$qui,$opt);
 
 	if (_DEBUG_AUTORISER) spip_log("$f($faire,$type,$id): ".($a?'OK':'niet'));
 
@@ -110,7 +110,7 @@ function autoriser_modifier_rubrique_dist($faire, $type, $id, $qui, $opt) {
 // = admins de rubrique parente si publiee
 function autoriser_modifier_breve_dist($faire, $type, $id, $qui, $opt) {
 	$s = spip_query(
-	"SELECT id_rubrique,statut FROM spip_breves WHERE id_breve=".intval($id));
+	"SELECT id_rubrique,statut FROM spip_breves WHERE id_breve="._q($id));
 	$r = spip_fetch_array($s);
 	return
 		($r['statut'] == 'publie')
@@ -123,15 +123,45 @@ function autoriser_modifier_breve_dist($faire, $type, $id, $qui, $opt) {
 // = ou statut 'prop,prepa' et $qui est auteur
 function autoriser_modifier_article_dist($faire, $type, $id, $qui, $opt) {
 	$s = spip_query(
-	"SELECT id_rubrique,statut FROM spip_articles WHERE id_article=".intval($id));
+	"SELECT id_rubrique,statut FROM spip_articles WHERE id_article="._q($id));
 	$r = spip_fetch_array($s);
 	return
 		autoriser('publier_dans', 'rubrique', $r['id_rubrique'], $qui, $opt)
 		OR (
 			in_array($qui['statut'], array('0minirezo', '1comite'))
-			AND in_array($r['statut'], array('prop','prepa'))
+			AND in_array($r['statut'], array('prop','prepa', 'poubelle'))
 			AND spip_num_rows(auteurs_article($id, "id_auteur=".$qui['id_auteur']))
 		);
 }
 
+// Lire les stats ?
+// = tous les admins
+function autoriser_voir_stats_dist($faire, $type, $id, $qui, $opt) {
+	return
+		$qui['statut'] == '0minirezo';
+}
+
+
+// Voir un objet
+function autoriser_voir_dist($faire, $type, $id, $qui, $opt) {
+	if (
+		($qui['statut'] == '0minirezo')
+		OR ($type != 'article')
+	)
+		return true;
+
+	// un article 'prepa' ou 'poubelle' dont on n'est pas auteur : interdit
+	$s = spip_query(
+	"SELECT statut FROM spip_articles WHERE id_article="._q($id));
+	$r = spip_fetch_array($s);
+		return in_array($r['statut'], array('prop', 'publie'));
+}
+
+// Voir les revisions ?
+// = voir l'objet
+function autoriser_voir_revisions_dist($faire, $type, $id, $qui, $opt) {
+	return
+		autoriser('voir', $type, $id, $qui, $opt);
+}
+
 ?>