/** * 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; }
<?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']);