Ejemplo n.º 1
0
    /**
     * Vérifie que l'utilisateur a bien le droit d'accéder à ce fichier
     * @param  mixed   $user Tableau contenant les infos sur l'utilisateur connecté, provenant de Membres::getLoggedUser, ou false
     * @return boolean       TRUE si l'utilisateur a le droit d'accéder au fichier, sinon FALSE
     */
    public function checkAccess($user = false)
    {
        // On regarde déjà si le fichier n'est pas lié au wiki
        $wiki = DB::getInstance()->simpleQuerySingle('SELECT wp.droit_lecture FROM fichiers_' . self::LIEN_WIKI . ' AS link
			INNER JOIN wiki_pages AS wp ON wp.id = link.id
			WHERE link.fichier = ? LIMIT 1;', false, (int) $this->id);
        // Page wiki publique, aucune vérification à faire, seul cas d'accès à un fichier en dehors de l'espace admin
        if ($wiki !== false && $wiki == Wiki::LECTURE_PUBLIC) {
            return true;
        }
        // Pas d'utilisateur connecté, pas d'accès aux fichiers de l'espace admin
        if (empty($user['droits'])) {
            return false;
        }
        if ($wiki !== false) {
            // S'il n'a même pas droit à accéder au wiki c'est mort
            if ($user['droits']['wiki'] < Membres::DROIT_ACCES) {
                return false;
            }
            // On renvoie à l'objet Wiki pour savoir si l'utilisateur a le droit de lire ce fichier
            $_w = new Wiki();
            $_w->setRestrictionCategorie($user['id_categorie'], $user['droits']['wiki']);
            return $_w->canReadPage($wiki);
        }
        // On regarde maintenant si le fichier est lié à la compta
        $compta = DB::getInstance()->simpleQuerySingle('SELECT 1 
			FROM fichiers_' . self::LIEN_COMPTA . ' WHERE fichier = ? LIMIT 1;', false, (int) $this->id);
        if ($compta && $user['droits']['compta'] >= Membres::DROIT_ACCES) {
            // OK si accès à la compta
            return true;
        }
        // Enfin, si le fichier est lié à un membre
        $membre = DB::getInstance()->simpleQuerySingle('SELECT id 
			FROM fichiers_' . self::LIEN_MEMBRES . ' WHERE fichier = ? LIMIT 1;', false, (int) $this->id);
        if ($membre !== false) {
            // De manière évidente, l'utilisateur a le droit d'accéder aux fichiers liés à son profil
            if ((int) $membre == $user['id']) {
                return true;
            }
            // Pour voir les fichiers des membres il faut pouvoir les gérer
            if ($user['droits']['membres'] >= Membres::DROIT_ECRITURE) {
                return true;
            }
        }
        return false;
    }
Ejemplo n.º 2
0
<?php

namespace Garradin;

require_once __DIR__ . '/../_inc.php';
if ($user['droits']['wiki'] < Membres::DROIT_ACCES) {
    throw new UserException("Vous n'avez pas le droit d'accéder à cette page.");
}
$wiki = new Wiki();
$wiki->setRestrictionCategorie($user['id_categorie'], $user['droits']['wiki']);