Plugin Massicot et gestion des autorisations
| Newsgroups | gmane.comp.web.spip.devel |
|---|---|
| Message-ID | <[email protected]> |
Bonjour à tou·tes,
J'ai l'impression qu'il y a un petit souci avec le plugin Massicot
dans sa version actuelle : aucune vérification d'autorisation n'est
effectuée, ce qui permet de recadrer des documents que l'on n'aurait
normalement pas le droit de modifier (logos d'autres articles que les
siens, logos d'autres utilisateur·trices, etc.).
J'ai bricolé le patch ci-joint pour rétablir un contrôle un peu plus
strict des autorisations, s'appuyant sur `autoriser('modifier', ...)`
pour savoir si un·e utilisateur·trice est autorisé·e à recadrer tel
ou tel logo ou document.
Je ne sais pas trop quelle est la meilleure manière de procéder, mais
si vous préférez, je peux aussi faire un pull request sur git.spip.net
(mais à ce moment-là , il me faudrait un compte sur ce site, s'il vous
plaît).
Merci beaucoup !
++
Glop
0001-Interdit-de-modifier-le-massicotage-si-non-autoris-e.patch
(text/plain, 7 KB)
From 6556a7065a94ff4ca93b050983610dfeb5b0d42a Mon Sep 17 00:00:00 2001 From: Glop <[email protected]> Date: Wed, 30 Dec 2020 15:32:09 +0000 Subject: [PATCH] =?UTF-8?q?Interdit=20de=20modifier=20le=20massicotage=20s?= =?UTF-8?q?i=20non=20autoris=C3=A9=C2=B7e=20=C3=A0=20modifier=20l'objet.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- formulaires/inc-apercu-logo-roles-documents.html | 10 ++++++---- formulaires/inc-apercu-logo.html | 10 ++++++---- lang/massicot_en.php | 3 +++ lang/massicot_fr.php | 3 +++ massicot_fonctions.php | 10 ++++++++++ massicot_pipelines.php | 5 ++++- prive/squelettes/contenu/massicoter_image.html | 1 + prive/squelettes/inclure/lien_recadre.html | 14 ++++++++------ 8 files changed, 41 insertions(+), 15 deletions(-) diff --git a/formulaires/inc-apercu-logo-roles-documents.html b/formulaires/inc-apercu-logo-roles-documents.html index 9ef0795..2785acc 100644 --- a/formulaires/inc-apercu-logo-roles-documents.html +++ b/formulaires/inc-apercu-logo-roles-documents.html @@ -88,10 +88,12 @@ }, 'ajax supprimer', })] - <a href="[(#URL_ECRIRE{massicoter_image, objet=#ENV{objet}&id_objet=#ENV{id_objet}}|parametre_url{redirect,#SELF}|parametre_url{role, #GET{role}})]" - class="bouton"> - <strong><:massicot:massicoter:></strong> - </a> + [(#AUTORISER{modifier,#ENV{objet},#ENV{id_objet}}) + <a href="[(#URL_ECRIRE{massicoter_image, objet=#ENV{objet}&id_objet=#ENV{id_objet}}|parametre_url{redirect,#SELF}|parametre_url{role, #GET{role}})]" + class="bouton"> + <strong><:massicot:massicoter:></strong> + </a> + ] </div> ] diff --git a/formulaires/inc-apercu-logo.html b/formulaires/inc-apercu-logo.html index 92669bf..94bbc90 100644 --- a/formulaires/inc-apercu-logo.html +++ b/formulaires/inc-apercu-logo.html @@ -27,10 +27,12 @@ #SET{hauteur,#GET{logo_recadre}|hauteur} [<div class="titre">(#ENV{titre,''})</div>] <div class="taille"><:info_largeur_vignette{largeur_vignette=#GET{largeur},hauteur_vignette=#GET{hauteur}}:></div> - <a href="[(#URL_ECRIRE{massicoter_image, objet=#ENV{objet}&id_objet=#ENV{id_objet}}|parametre_url{redirect,#SELF}|parametre_url{role, #GET{role}})]" - class="bouton"> - <strong><:massicot:massicoter:></strong> - </a> + [(#AUTORISER{modifier,#ENV{objet},#ENV{id_objet}}) + <a href="[(#URL_ECRIRE{massicoter_image, objet=#ENV{objet}&id_objet=#ENV{id_objet}}|parametre_url{redirect,#SELF}|parametre_url{role, #GET{role}})]" + class="bouton"> + <strong><:massicot:massicoter:></strong> + </a> + ] [(#ENV{editable}|oui) <input type='submit' class='submit supprimer' id="supprimer_#ENV{quoi,logo_on}_#ENV{objet}_#ENV{id_objet}" name="supprimer_#ENV{quoi,logo_on}" value='<:lien_supprimer|ucfirst|attribut_html:>' /> ] diff --git a/lang/massicot_en.php b/lang/massicot_en.php index 1d107d6..e444bf1 100644 --- a/lang/massicot_en.php +++ b/lang/massicot_en.php @@ -22,6 +22,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'massicot_titre' => 'Image cropper', 'massicoter' => 'Crop the image', + // O + 'operation_non_autorisee' => 'This operation is not authorized.', + // R 'reinitialiser' => 'Reset', diff --git a/lang/massicot_fr.php b/lang/massicot_fr.php index fd472e2..29f1ed6 100644 --- a/lang/massicot_fr.php +++ b/lang/massicot_fr.php @@ -20,6 +20,9 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( 'massicot_titre' => 'Massicot', 'massicoter' => 'Recadrer lâimage', + // O + 'operation_non_autorisee' => 'Opération non autorisée.', + // R 'reinitialiser' => 'Réinitialiser', diff --git a/massicot_fonctions.php b/massicot_fonctions.php index 3c0cb9f..fa15c5e 100644 --- a/massicot_fonctions.php +++ b/massicot_fonctions.php @@ -64,6 +64,11 @@ function massicot_chemin_image($objet, $id_objet, $role = null) { */ function massicot_enregistrer($objet, $id_objet, $parametres) { + include_spip('inc/autoriser'); + if (!autoriser('modifier', $objet, $id_objet)) { + return _T('massicot:operation_non_autorisee'); + } + include_spip('action/editer_objet'); include_spip('action/editer_liens'); @@ -144,6 +149,11 @@ function massicot_enregistrer($objet, $id_objet, $parametres) { */ function massicot_supprimer($objet, $id_objet, $role='') { + include_spip('inc/autoriser'); + if (!autoriser('modifier', $objet, $id_objet)) { + return _T('massicot:operation_non_autorisee'); + } + include_spip('base/abstract_sql'); $id_massicotage = massicot_get_id($objet, $id_objet, $role); diff --git a/massicot_pipelines.php b/massicot_pipelines.php index 2be9aa5..4891679 100644 --- a/massicot_pipelines.php +++ b/massicot_pipelines.php @@ -171,12 +171,15 @@ function massicot_editer_contenu_objet($flux) { if ($args['type'] === 'illustrer_document') { include_spip('base/abstract_sql'); + include_spip('inc/autoriser'); if ($id_vignette = sql_getfetsel( 'id_vignette', 'spip_documents', 'id_document='.intval($args['id']) - )) { + ) + and autoriser('modifier', 'document', $args['id']) + and autoriser('modifier', 'document', $id_vignette)) { $href = generer_url_ecrire( 'massicoter_image', 'objet=document&id_objet=' . $id_vignette . '&redirect=' . urlencode(self()) diff --git a/prive/squelettes/contenu/massicoter_image.html b/prive/squelettes/contenu/massicoter_image.html index 8442cca..b5201f1 100644 --- a/prive/squelettes/contenu/massicoter_image.html +++ b/prive/squelettes/contenu/massicoter_image.html @@ -1,3 +1,4 @@ +[(#AUTORISER{modifier,#ENV{objet},#ENV{id_objet}}|sinon_interdire_acces)] <h1><:massicot:massicoter:> «[(#ENV{objet}|=={document}|?{#INFO_TITRE{document, #ENV{id_objet}}|sinon{Document #ENV{id_objet}}, Logo #INFO_TITRE{#ENV{objet}, #ENV{id_objet}}|sinon{#ENV{objet} #ENV{id_objet}}})]»</h1> #FORMULAIRE_MASSICOTER_IMAGE{#OBJET, #ID_OBJET, #ENV{redirect}, #ENV{format}, #ENV{role}} diff --git a/prive/squelettes/inclure/lien_recadre.html b/prive/squelettes/inclure/lien_recadre.html index a6aaf45..0d52d89 100644 --- a/prive/squelettes/inclure/lien_recadre.html +++ b/prive/squelettes/inclure/lien_recadre.html @@ -12,10 +12,12 @@ #ENV{id_document}}})] <BOUCLE_document(DOCUMENTS) {id_document}{media=image}{tout}{distant=non}> - <a class="bouton" role="button" - href="[(#URL_ECRIRE{massicoter_image, - objet=#GET{objet_lien}&id_objet=#GET{id_objet_lien}} - |parametre_url{redirect,#SELF\#doc#ID_DOCUMENT})]"> - <strong><:massicot:massicoter:></strong> - </a> + [(#AUTORISER{modifier,document,#ENV{id_document}}|et{#AUTORISER{modifier,#GET{objet_lien},#GET{id_objet_lien}}}) + <a class="bouton" role="button" + href="[(#URL_ECRIRE{massicoter_image, + objet=#GET{objet_lien}&id_objet=#GET{id_objet_lien}} + |parametre_url{redirect,#SELF\#doc#ID_DOCUMENT})]"> + <strong><:massicot:massicoter:></strong> + </a> + ] </BOUCLE_document> -- 2.20.1