[SPIP Zone] Accès restreint V3 et documents d'autres objets que articles, rubriques ou breves...

Hello…

Une des super fonctionnalités de la future 2.0 est la disparition de spip_documents_cequevousvoulez au profit de spip_documents_liens…

  1. Il est alors facile d’associer des documents à d’autres objets de spip en utilisant l’api des documents … (Dans mon cas j’ajoute des documents à des commandes faites sur le site, notamment des pdf) => Marche super

  2. J’ai installé accès restreint v3 pour gérer des parties restreintes du site… => Marche super

  3. J’ai activé les htaccess pour éviter que des petits curieux aillent dans IMG/ => marche super

La combinaison du 1 et du 3 et donc le 2 les rejoints dans ce cas, il est impossible d’avoir accès à la balise #URL_DOCUMENT des documents joints à des objets que spip ne connais pas…

Pourquoi parce que Accès restreint redéfinit autoriser_voir_document ce qui est normal car il est nécessaire de gérer les zones mais se fixe uniquement sur les objets prédéfinis de spip… et donc squeeze l’ensemble des documents reliés à nos nouveaux objets

Mes nouveaux objets n’ont pas besoin d’être restreint comme les articles et autres… donc je ne veux pas réinventer la roue… ils gèrent eux même leur droits d’accès grace aux sessions visiteurs… mais pour avoir tout de même accès aux document joint je propose l’ajout d’une condition dans la fonction autoriser_document_voir de inc/acces_restreint_autoriser qui ressemblerait à quelque chose comme ca :

function autoriser_document_voir($faire, $type, $id, $qui, $opt) {
include_spip(‹ public/acces_restreint ›);
static $documents_statut = array();
static $where = array();
$publique = isset($opt[‹ publique ›])?$opt[‹ publique ›]:!test_espace_prive();
$id_auteur = isset($qui[‹ id_auteur ›]) ? $qui[‹ id_auteur ›] : $GLOBALS[‹ visiteur_session ›][‹ id_auteur ›];
if (!isset($documents_statut[$id_auteur][$publique][$id])){
if (!isset($where[$publique])){
$where[$publique] = accesrestreint_documents_accessibles_where(‹ id_document ›, $publique?« true »:« false »);
$where[$publique] = eval(« return « .$where[$publique]. »; »);
}
$documents_statut[$id_auteur][$publique][$id] = sql_fetsel(‹ id_document ›,‹ spip_documents ›,array(‹ id_document= ›.intval($id),$where[$publique]));
if ($documents_statut[$id_auteur][$publique][$id])
$documents_statut[$id_auteur][$publique][$id] = autoriser_document_voir_dist($faire, $type, $id, $qui, $opt);
else{
$objets = array(« article », « rubrique », « breve »);
$objet = sql_getfetsel(‹ objet ›,‹ spip_documents_liens ›,'id_document = '.intval($id));
if(!in_array($objet, $objets)){
$documents_statut[$id_auteur][$publique][$id] = autoriser_document_voir_dist($faire, $type, $id, $qui, $opt);
}
}
}
return $documents_statut[$id_auteur][$publique][$id];
}

après avoir vérifier les droits sur le document dans les cas normaux, si l’objet que l’on a associé au document est autre qu’un cas normal on retourne la fonction d’origine autoriser_document_voir_dist

Cela peut certainement être mieux fait … mais ca a le mérite de me permettre de revoir mes documents :wink:

Si ca (ou un autre système) pouvait être ajouté … ce serait tip top

Merci

Q.

PS: t’as vu cedric j’ai pas tout cassé pendant la nuit sans que personne ne me voie cette fois hein… :stuck_out_tongue: