#PHP
[(#INCLURE{fond=fabrique/entetes/php,env,
description=Définit les autorisations du plugin #ENV{paquet/nom},
package=Autorisations})]
/*
* Un fichier d'autorisations permet de regrouper
* les fonctions d'autorisations de votre plugin
*/
/**
* Fonction d'appel pour le pipeline
* @pipeline autoriser */
function [(#PREFIXE)]_autoriser() {
}
/* Exemple
function autoriser_[(#PREFIXE)]_configurer_dist($faire, $type, $id, $qui, $opt) {
// type est un objet (la plupart du temps) ou une chose.
// autoriser('configurer', '_[(#PREFIXE)]') => $type = '[(#PREFIXE)]'
// au choix :
return autoriser('webmestre', $type, $id, $qui, $opt); // seulement les webmestres
return autoriser('configurer', '', $id, $qui, $opt); // seulement les administrateurs complets
return $qui['statut'] == '0minirezo'; // seulement les administrateurs (même les restreints)
// ...
}
*/
[
(#SET{type,#TYPE|fabrique_type_autorisation})][
(#SET{objet,#OBJET|fabrique_type_autorisation})
]// -----------------
// Objet [(#OBJET)]
[
/**
* Autorisation de voir un élément de menu \(#GET{objet}\)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_#GET{objet}_menu_dist($faire, $type, $id, $qui, $opt) {
return true;
}(#VAL{menu_edition}|in_any{#VALEUR{boutons}})]
[
/**
* Autorisation de voir le bouton d'accès rapide de création \(#GET{type}\)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_#GET{type}creer_menu_dist($faire, $type, $id, $qui, $opt) {
return autoriser('creer', ['(#TYPE)'], '', $qui, $opt);
}(#VAL{outils_rapides}|in_any{#VALEUR{boutons}})]
/**
* Autorisation de créer \(#GET{type}\)
*[(#SET{creer,[(#AUTORISATIONS|fabrique_code_autorisation_defaut{objet_creer, #PREFIXE, #VALEUR})]})]
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_#GET{type}_creer_dist($faire, $type, $id, $qui, $opt) {[
return \([(#GET{creer})] and sql_countsel('spip_rubriques')>0\);(#VALEUR|champ_present{id_rubrique}|oui)][
return #GET{creer};(#VALEUR|champ_present{id_rubrique}|non)]
}
/**
* Autorisation de voir \(#GET{type}\)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_#GET{type}_voir_dist($faire, $type, $id, $qui, $opt) {
return [(#AUTORISATIONS|fabrique_code_autorisation_defaut{objet_voir, #PREFIXE, #VALEUR})];
}
/**
* Autorisation de modifier \(#GET{type}\)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_#GET{type}_modifier_dist($faire, $type, $id, $qui, $opt) {
return [(#AUTORISATIONS|fabrique_code_autorisation_defaut{objet_modifier, #PREFIXE, #VALEUR})];
}
/**
* Autorisation de supprimer \(#GET{type}\)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_#GET{type}_supprimer_dist($faire, $type, $id, $qui, $opt) {
return [(#AUTORISATIONS|fabrique_code_autorisation_defaut{objet_supprimer, #PREFIXE, #VALEUR})];
}
/**
* Autorisation de créer l'élément \(#GET{type}\) dans une rubrique
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_rubrique_creer#GET{type}dans_dist($faire, $type, $id, $qui, $opt) {
return ($id and autoriser('voir', 'rubrique', $id) and autoriser('creer', '[(#TYPE)]', $id));
}
/**
* Autorisation de créer l'élément \(#GET{type}\) dans un [(#VALEUR{parent/objet})]
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_[(#VALEUR{parent/type}|fabrique_type_autorisation)]_creer#GET{type}dans_dist($faire, $type, $id, $qui, $opt) {
return ($id and autoriser('voir', '[(#VALEUR{parent/objet})]', $id) and autoriser('creer', '[(#TYPE)]'));
}
/**
* Autorisation de lier/délier l'élément \(#GET{objet}\)
*
* @param string $faire Action demandée
* @param string $type Type d'objet sur lequel appliquer l'action
* @param int $id Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de cette autorisation
* @return bool true s'il a le droit, false sinon
**/
function autoriser_associer#GET{objet}_dist($faire, $type, $id, $qui, $opt) {
return [(#AUTORISATIONS|fabrique_code_autorisation_defaut{associerobjet, #OBJET, #VALEUR|champ_present{id_rubrique}})];
}[(#REM)
][(#REM)
]
/**
* Lister les auteurs liés à un objet
*
* @param int $objet Type de l'objet
* @param int $id_objet Identifiant de l'objet
* @return array Liste des id_auteur trouvés
*/
function [(#PREFIXE)]_auteurs_objet($objet, $id_objet) {
$auteurs = sql_allfetsel('id_auteur', 'spip_auteurs_liens', array('objet = ' . sql_quote($objet), 'id_objet = ' . intval($id_objet)));
if (is_array($auteurs)) {
return array_map('reset', $auteurs);
}
return array();
}
[(#REM)
]
/**
* Tester si on est administrateur complet ou admin restreint sur cette rubrique
*
* @param string $objet Type d'objet
* @param int $id_objet Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @return bool true s'il a le droit, false sinon
**/
function [(#PREFIXE)]_autoriser_admins($objet, $id_objet, $qui) {
$id = sql_getfetsel('id_rubrique', table_objet_sql($objet), id_table_objet($objet) . ' = ' . intval($id_objet));
return ($qui['statut'] == '0minirezo') and (!$qui['restreint'] or !$id or in_array($id, $qui['restreint']));
}
[(#REM)
]
/**
* Tester si le statut de l'objet autorise des changements, en fonction du statut de l'auteur.
*
* @param string $objet Type d'objet
* @param int $id_objet Identifiant de l'objet
* @param array $qui Description de l'auteur demandant l'autorisation
* @param array $opt Options de l'autorisation
* @return bool true s'il a le droit, false sinon
**/
function [(#PREFIXE)]_autoriser_statuts($objet, $id_objet, $qui, $opt) {
$statut = sql_getfetsel('statut', table_objet_sql($objet), id_table_objet($objet) . ' = ' . intval($id_objet));
return (!isset($opt['statut']) or $opt['statut'] !== 'publie')
and in_array($qui['statut'], array('0minirezo', '1comite'))
and in_array($statut, array('prop', 'prepa', 'poubelle'));
}
[(#REM)
]