diff --git a/__cms__/chemin/chemin.php b/__cms__/chemin/chemin.php index b5bf959..0bca7b4 100644 --- a/__cms__/chemin/chemin.php +++ b/__cms__/chemin/chemin.php @@ -2,6 +2,9 @@ require_once(dirname(__FILE__) . "/path.php"); +define('CHEMIN_JOKER_MULTI_SEGMENTS', '**'); +define('CHEMIN_JOKER_SEGMENT', '*'); + class Chemin { // Si $chemin est un tableau, chaque segment doit vérifier les invariants de nettoyer_segment. public function __construct($chemin) { @@ -13,7 +16,8 @@ class Chemin { } public function correspond($motif) { - // motif : liste de segments, pouvant être un chaîne ou un jocker + $motif = $motif->segments; + // motif : liste de segments pouvant être un chaîne ou un jocker // correspondant à "n'importe quelle chaîne pour ce segment". Le // dernier segment peut être le joker "n'importe quelle suite de // segments (le motif doit donc correspondre à un préfixe du chemin diff --git a/__cms__/cms.php b/__cms__/cms.php index 81c0198..9249980 100644 --- a/__cms__/cms.php +++ b/__cms__/cms.php @@ -17,7 +17,8 @@ class CMS { $chemin = new Chemin($chemin_str); $noms_params = Modules::get_liste_paramètres($chemin); $noms_params[] = "action"; - // récupérer $noms_params dans $_GET, $_POST et $_FILE + $paramètres = array(); + // récupérer $noms_params dans $_GET, $_POST et $_FILE ==> $paramètres $action = $paramètres["action"]; Modules::action($chemin, $action, $paramètres); } diff --git a/__cms__/modules/modules.php b/__cms__/modules/modules.php index 88d4974..b49cd7f 100644 --- a/__cms__/modules/modules.php +++ b/__cms__/modules/modules.php @@ -14,9 +14,10 @@ class Modules { } public static function get_liste_paramètres($chemin) { + $module = self::get_module($chemin); + if ($module === false) return false; // TODO - call_user_func(array(self::get_module($chemin), "get_liste_paramètres")); - return ; + return call_user_func(array($module, "get_liste_paramètres"));; } } diff --git a/__cms__/securite/permissions.php b/__cms__/securite/permissions.php index 33c3d51..ff61cb3 100644 --- a/__cms__/securite/permissions.php +++ b/__cms__/securite/permissions.php @@ -26,9 +26,9 @@ class Permissions { // sinon on renvoie false foreach (self::get_regles() as $r) { - if ($chemin->correspond($r["chemin"]) - && self::action_correspond($action, $r["action"]) - && $groupe == $r["groupe"]) { + if ( self::chemin_correspond($chemin, $r["chemin"]) + && self::action_correspond($action, $r["action"]) + && self::groupe_correspond($groupe, $r["groupe"])) { return $r["autorisation"]; } } @@ -36,6 +36,22 @@ class Permissions { return false; } + public static function chemin_correspond($chemin, $motif) { + $chemin->correspond($motif); + } + + public static function action_correspond($action, $motif) { + if ($motif == '*') return true; + if ($action == $motif) return true; + return false; + } + + public static function groupe_correspond($groupe, $motif) { + if ($motif == '*') return true; + if ($groupe == $motif) return true; + return false; + } + // TODO : d'abord set_nouvelles_regles, puis appliquer_nouvelles_regles. public function set_regles($regles) { // $regles est un tableau de quadruplets @@ -70,7 +86,7 @@ class Permissions { return false; } $regles[] = array( - "chemin" => self::unescape_element_regle(new Chemin($r[0])), + "chemin" => new Chemin(self::unescape_element_regle($r[0])), "action" => self::unescape_element_regle($r[1]), "groupe" => self::unescape_element_regle($r[2]), "autorisation" => ($r[3] == "oui")