Beispiel #1
0
function autoriser_dist($faire, $type='', $id=0, $qui = NULL, $opt = NULL) {

	// Qui ? visiteur_session ?
	// si null ou '' (appel depuis #AUTORISER) on prend l'auteur loge
	if ($qui === NULL OR $qui==='')
	  $qui = $GLOBALS['visiteur_session'] ? $GLOBALS['visiteur_session'] : array('statut' => '', 'id_auteur' =>0, 'webmestre' => 'non');
	elseif (is_numeric($qui)) {
		$qui = sql_fetsel("*", "spip_auteurs", "id_auteur=".$qui);
	}

	// Admins restreints, on construit ici (pas generique mais...)
	// le tableau de toutes leurs rubriques (y compris les sous-rubriques)
	if (_ADMINS_RESTREINTS AND is_array($qui))
		$qui['restreint'] = liste_rubriques_auteur($qui['id_auteur']);

	if (_DEBUG_AUTORISER) spip_log("autoriser $faire $type $id ($qui[nom]) ?");

	// Aliases pour les types pas generiques (a etendre et ameliorer)
	if ($type == 'groupes_mot') $type = 'groupemots';
	#if ($type == 'syndic_article') $type = 'syndicarticle';

	// Si une exception a ete decretee plus haut dans le code, l'appliquer
	if (isset($GLOBALS['autoriser_exception'][$faire][$type][$id])
	AND autoriser_exception($faire,$type,$id,'verifier'))
		return true;
	
	// Chercher une fonction d'autorisation
	// Dans l'ordre on va chercher autoriser_type_faire[_dist], autoriser_type[_dist],
	// autoriser_faire[_dist], autoriser_defaut[_dist]
	$fonctions = $type
		? array (
			'autoriser_'.$type.'_'.$faire,
			'autoriser_'.$type.'_'.$faire.'_dist',
			'autoriser_'.$type,
			'autoriser_'.$type.'_dist',
			'autoriser_'.$faire,
			'autoriser_'.$faire.'_dist',
			'autoriser_defaut',
			'autoriser_defaut_dist'
		)
		: array (
			'autoriser_'.$faire,
			'autoriser_'.$faire.'_dist',
			'autoriser_defaut',
			'autoriser_defaut_dist'
		);
	
	foreach ($fonctions as $f) {
		if (function_exists($f)) {
			$a = $f($faire,$type,$id,$qui,$opt);
			break;
		}
	}

	if (_DEBUG_AUTORISER) spip_log("$f($faire,$type,$id,$qui[nom]): ".($a?'OK':'niet'));

	return $a;
}
Beispiel #2
0
/**
 * Autoriser une action
 * 
 * Voir autoriser() pour une description complète
 * 
 * @see autoriser()
 * 
 * @param string $faire
 *   une action ('modifier', 'publier'...)
 * @param string $type
 *   type d'objet ou nom de table ('article')
 * @param int $id
 *   id de l'objet sur lequel on veut agir
 * @param null|int|array $qui
 *   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 $opt
 *   options sous forme de tableau associatif
 * @return bool
 *   true si la personne peut effectuer l'action
 */
function autoriser_dist($faire, $type = '', $id = 0, $qui = NULL, $opt = NULL)
{
    // Qui ? visiteur_session ?
    // si null ou '' (appel depuis #AUTORISER) on prend l'auteur loge
    if ($qui === NULL or $qui === '') {
        $qui = $GLOBALS['visiteur_session'] ? $GLOBALS['visiteur_session'] : array('statut' => '', 'id_auteur' => 0, 'webmestre' => 'non');
    } elseif (is_numeric($qui)) {
        $qui = sql_fetsel("*", "spip_auteurs", "id_auteur=" . $qui);
    }
    // Admins restreints, on construit ici (pas generique mais...)
    // le tableau de toutes leurs rubriques (y compris les sous-rubriques)
    if (_ADMINS_RESTREINTS and is_array($qui)) {
        $qui['restreint'] = isset($qui['id_auteur']) ? liste_rubriques_auteur($qui['id_auteur']) : array();
    }
    spip_log("autoriser {$faire} {$type} {$id} (" . (isset($qui['nom']) ? $qui['nom'] : '') . ") ?", "autoriser" . _LOG_DEBUG);
    // passer par objet_type pour avoir les alias
    // et supprimer les _
    $type = str_replace('_', '', strncmp($type, "_", 1) == 0 ? $type : objet_type($type, false));
    // Si une exception a ete decretee plus haut dans le code, l'appliquer
    if (isset($GLOBALS['autoriser_exception'][$faire][$type][$id]) and autoriser_exception($faire, $type, $id, 'verifier')) {
        return true;
    }
    // Chercher une fonction d'autorisation
    // Dans l'ordre on va chercher autoriser_type_faire[_dist], autoriser_type[_dist],
    // autoriser_faire[_dist], autoriser_defaut[_dist]
    $fonctions = $type ? array('autoriser_' . $type . '_' . $faire, 'autoriser_' . $type . '_' . $faire . '_dist', 'autoriser_' . $type, 'autoriser_' . $type . '_dist', 'autoriser_' . $faire, 'autoriser_' . $faire . '_dist', 'autoriser_defaut', 'autoriser_defaut_dist') : array('autoriser_' . $faire, 'autoriser_' . $faire . '_dist', 'autoriser_defaut', 'autoriser_defaut_dist');
    foreach ($fonctions as $f) {
        if (function_exists($f)) {
            $a = $f($faire, $type, $id, $qui, $opt);
            break;
        }
    }
    spip_log("{$f}({$faire},{$type},{$id}," . (isset($qui['nom']) ? $qui['nom'] : '') . "): " . ($a ? 'OK' : 'niet'), "autoriser" . _LOG_DEBUG);
    return $a;
}