You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

254 lines
11 KiB

<?php
/**
* Ce fichier contient les fonctions d'autorisations du plugin.
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Fonction appelée par le pipeline.
*/
function ezcheck_autoriser() {
}
/**
* Autorisation minimale d'accès à toutes les pages du plugin Check Factory sauf celle de configuration
* du plugin lui-même (controles, dashboard).
* Par défaut, seuls les administrateurs complets sont autorisés à utiliser ces pages.
* Cette autorisation est à la base de la plupart des autres autorisations du plugin.
*
* @param string $faire L'action : `ezcheck`
* @param string $type Le type d'objet ou nom de table : chaine vide
* @param int $id Id de l'objet sur lequel on veut agir : 0, inutilisé
* @param null|array|int $qui L'initiateur de l'action:
* - si null on prend alors visiteur_session
* - un id_auteur (on regarde dans la base)
* - un tableau auteur complet, y compris [restreint]
* @param null|array $options Tableau d'options sous forme de tableau associatif : `null`, inutilisé
*
* @return bool `true`si l'auteur est autorisée à exécuter l'action, `false` sinon.
*/
function autoriser_ezcheck_dist($faire, $type, $id, $qui, $options) {
return autoriser('defaut');
}
/**
* Autorisation d'affichage du menu d'accès aux dashboards (page=ezcheck).
* Il faut être autorisé à utiliser ezcheck.
*
* @param string $faire L'action : `menu`
* @param string $type Le type d'objet ou nom de table : `ezcheck` (ce n'est pas un objet au sens SPIP)
* @param int $id Id de l'objet sur lequel on veut agir : 0, inutilisé
* @param null|array|int $qui L'initiateur de l'action:
* - si null on prend alors visiteur_session
* - un id_auteur (on regarde dans la base)
* - un tableau auteur complet, y compris [restreint]
* @param null|array $options Tableau d'options sous forme de tableau associatif : `null`, inutilisé
*
* @return bool `true`si l'auteur est autorisée à exécuter l'action, `false` sinon.
*/
function autoriser_ezcheck_menu_dist($faire, $type, $id, $qui, $options) {
return autoriser('ezcheck');
}
/**
* Autorisation d'accès à la page de configuration du plugin Check Factory (page=configurer_ezcheck).
* Il faut être autorisé :
* - à utiliser le plugin
* - et avoir l'autorisation stabdard de configuration.
*
* @param string $faire L'action : `configurer`
* @param string $type Le type d'objet ou nom de table : `ezcheck` (ce n'est pas un objet au sens SPIP)
* @param int $id Id de l'objet sur lequel on veut agir : 0, inutilisé
* @param null|array|int $qui L'initiateur de l'action:
* - si null on prend alors visiteur_session
* - un id_auteur (on regarde dans la base)
* - un tableau auteur complet, y compris [restreint]
* @param null|array $options Tableau d'options sous forme de tableau associatif : `null`, inutilisé
*
* @return bool `true`si l'auteur est autorisée à exécuter l'action, `false` sinon.
*/
function autoriser_ezcheck_configurer_dist($faire, $type, $id, $qui, $options) {
return
autoriser('ezcheck')
and autoriser('configurer');
}
/**
* Autorisation d'afficher la page d'un dashboard donné. A partir de cette page il est possible de visualiser les
* contrôles et les anomalies, d'exécuter un contrôle manuellement, lancer une action corrective.
* - être autorisé à utiliser Check Factory,
* - que l'identifiant du dashboard soit connu.
*
* @param string $faire L'action : `voir`
* @param string $type Le type d'objet ou nom de table : `dashboard` (ce n'est pas un objet au sens SPIP)
* @param int|string $id Id de l'objet sur lequel on veut agir : identifiant du dashboard sous forme d'une chaine.
* C'est un détournement de l'utilisation habituelle pour un objet.
* @param null|array|int $qui L'initiateur de l'action:
* - si null on prend alors visiteur_session
* - un id_auteur (on regarde dans la base)
* - un tableau auteur complet, y compris [restreint]
* @param null|array $options Tableau d'options sous forme de tableau associatif : `null`, inutilisé
*
* @return bool `true`si l'auteur est autorisée à exécuter l'action, `false` sinon.
*/
function autoriser_dashboard_voir_dist($faire, $type, $id, $qui, $options) {
// Initialisation de l'autorisation à non autorisé par défaut.
$autoriser = false;
if (autoriser('ezcheck')) {
include_spip('inc/ezcheck_dashboard');
$dashboard_ids = dashboard_repertorier('identifiant');
if (
is_string($id)
and $id
and in_array($id, $dashboard_ids)
) {
$autoriser = true;
}
}
return $autoriser;
}
/**
* Autorisation d'activation et de désactivation des types de contrôle.
* Il faut :
* - être autorisé à configurer Check Factory
* - que le type de contrôle soit bien chargé
* - et qu'il ne soit pas un état.
*
* @param string $faire L'action : `modifier`
* @param string $type Le type d'objet ou nom de table : `typecontrole` (ce n'est pas un objet au sens SPIP)
* @param int|string $id Id de l'objet sur lequel on veut agir : identifiant du type de contrôle sous forme d'une chaine.
* C'est un détournement de l'utilisation habituelle pour un objet.
* @param null|array|int $qui L'initiateur de l'action:
* - si null on prend alors visiteur_session
* - un id_auteur (on regarde dans la base)
* - un tableau auteur complet, y compris [restreint]
* @param null|array $options Tableau d'options sous forme de tableau associatif : `null`, inutilisé
*
* @return bool `true`si l'auteur est autorisée à exécuter l'action, `false` sinon.
*/
function autoriser_typecontrole_modifier_dist($faire, $type, $id, $qui, $options) {
// Initialisation de l'autorisation à non autorisé par défaut.
$autoriser = false;
if (autoriser('ezcheck', 'configurer')) {
include_spip('inc/ezcheck_type_controle');
$type_controle = type_controle_lire($id);
if (
$type_controle
and ($type_controle['est_etat'] === 'non')
) {
$autoriser = true;
}
}
return $autoriser;
}
/**
* Autorisation d'exécution d'un type de contrôle.
* Il faut :
* - être autorisé à utiliser Check Factory
* - que le type de contrôle soit bien chargé, actif et que ce ne soit pas un état
* - et que soit la fonction de contrôle existe.
*
* @param string $faire L'action : `executer`
* @param string $type Le type d'objet ou nom de table : `typecontrole` (ce n'est pas un objet au sens SPIP)
* @param int|string $id Id de l'objet sur lequel on veut agir : identifiant du type de contrôle sous forme d'une chaine.
* C'est un détournement de l'utilisation habituelle pour un objet.
* @param null|array|int $qui L'initiateur de l'action:
* - si null on prend alors visiteur_session
* - un id_auteur (on regarde dans la base)
* - un tableau auteur complet, y compris [restreint]
* @param null|array $options Tableau d'options sous forme de tableau associatif : `null`, inutilisé
*
* @return bool `true`si l'auteur est autorisée à exécuter l'action, `false` sinon.
*/
function autoriser_typecontrole_executer_dist($faire, $type, $id, $qui, $options) {
// Initialisation de l'autorisation à non autorisé par défaut.
$autoriser = false;
if (autoriser('ezcheck')) {
include_spip('inc/ezcheck_type_controle');
$type_controle = type_controle_lire($id);
if (
$type_controle
and ($type_controle['est_etat'] === 'non')
and ($type_controle['actif'] === 'oui')
and $type_controle['include']
and include_spip($type_controle['include'])
and function_exists($type_controle['fonction'])
) {
$autoriser = true;
}
}
return $autoriser;
}
/**
* Autorisation de mise à poubelle des observations fermées d'un type de contrôle.
* Il faut :
* - être autorisé à exécuter le type de contrôle.
*
* @param string $faire L'action : `vider`
* @param string $type Le type d'objet ou nom de table : `typecontrole` (ce n'est pas un objet au sens SPIP)
* @param int|string $id Id de l'objet sur lequel on veut agir : identifiant du type de contrôle sous forme d'une chaine.
* C'est un détournement de l'utilisation habituelle pour un objet.
* @param null|array|int $qui L'initiateur de l'action:
* - si null on prend alors visiteur_session
* - un id_auteur (on regarde dans la base)
* - un tableau auteur complet, y compris [restreint]
* @param null|array $options Tableau d'options sous forme de tableau associatif : `null`, inutilisé
*
* @return bool `true`si l'auteur est autorisée à exécuter l'action, `false` sinon.
*/
function autoriser_typecontrole_vider_dist($faire, $type, $id, $qui, $options) {
// Initialisation de l'autorisation à non autorisé par défaut.
$autoriser = false;
if (autoriser('executer', 'typecontrole', $id)) {
$autoriser = true;
}
return $autoriser;
}
/**
* Autorisation de changement de statut d'une observation.
* Il faut :
* - être autorisé à utiliser Check Factory,
* - que l'observation existe,
* - que l'action soit fournie et corresponde à `corriger`, `acquitter` ou `supprimer`.
*
* @param string $faire L'action : `instituer`
* @param string $type Le type d'objet ou nom de table : `observation`
* @param int|string $id Id de l'objet sur lequel on veut agir : identifiant numérique de l'observation.
* @param null|array|int $qui L'initiateur de l'action:
* - si null on prend alors visiteur_session
* - un id_auteur (on regarde dans la base)
* - un tableau auteur complet, y compris [restreint]
* @param null|array $options Tableau d'options sous forme de tableau associatif : index `action` qui mène au changement
* de statut.
*
* @return bool `true`si l'auteur est autorisée à exécuter l'action, `false` sinon.
*/
function autoriser_observation_instituer_dist($faire, $type, $id, $qui, $options) {
// Initialisation de l'autorisation à non autorisé par défaut.
$autoriser = false;
if (
autoriser('ezcheck')
and include_spip('action/editer_objet')
and objet_lire('observation', (int) $id)
and isset($options['action'])
and in_array($options['action'], ['corriger', 'acquitter', 'supprimer'])) {
$autoriser = true;
}
return $autoriser;
}