X-Git-Url: http://git.dj3c1t.com/index.cgi?a=blobdiff_plain;f=mw%2Fenv%2Fmodules%2Fmw_env_run.php;h=30d89cf08b062b2a0c0bb1b4dc18148f81a26914;hb=5dfe5e84a7007ddd9737707ce15f0155e6415066;hp=51b63303199485599dc04adaebdf6fdd69d136b9;hpb=36ed114046cbe3d72a3589230e9f306a54fcc79d;p=mtweb diff --git a/mw/env/modules/mw_env_run.php b/mw/env/modules/mw_env_run.php index 51b6330..30d89cf 100644 --- a/mw/env/modules/mw_env_run.php +++ b/mw/env/modules/mw_env_run.php @@ -9,12 +9,12 @@ return $data->get_session_user(); } - function set_etat($etat, $valid_status = true){ + function set_etat($etat, $valid_role = true){ if(($this->etat = $this->valid_etat($etat)) !== false){ - if(!$valid_status || $this->status_ok($this->etat, false)){ + if(!$valid_role || $this->action_allowed($this->etat, false)){ return $this->etat; } - else $this->erreur("Vous n'avez pas le statut requis pour effectuer cette action"); + else $this->erreur("Vous n'avez pas le role requis pour effectuer cette action"); } else $this->erreur("etat invalide"); return false; @@ -75,54 +75,64 @@ return $this->valid_etat($this->etat); } - function status_ok($etat, $CHECK_FORMAT = true){ - $OK = $this->config("default_allow"); + function action_allowed($etat, $CHECK_FORMAT = true){ $data = $this->data(); if($CHECK_FORMAT) $etat = $this->valid_etat($etat); - if($etat !== false){ - if(($user_status = $data->get_user_status()) !== false){ - if( - ( - $action_status = $data->get_action_status( - $etat["mod"], - $etat["controller"], - $etat["action"] - ) - ) !== false - ){ - $action = $etat["mod"]."/".$etat["controller"]."/".$etat["action"]; - if(isset($action_status[$action])){ - $OK = - (isset($action_status[$action][0]) && $action_status[$action][0]) - || (isset($action_status[$action][$user_status]) && $action_status[$action][$user_status]); - } - else{ - $action = $etat["mod"]."/".$etat["controller"]; - if(isset($action_status[$action])){ - $OK = - (isset($action_status[$action][0]) && $action_status[$action][0]) - || (isset($action_status[$action][$user_status]) && $action_status[$action][$user_status]); - } - else{ - $action = $etat["mod"]; - if(isset($action_status[$action])){ - $OK = - (isset($action_status[$action][0]) && $action_status[$action][0]) - || (isset($action_status[$action][$user_status]) && $action_status[$action][$user_status]); - } - } - } + if($etat === false){ + $this->erreur("etat invalide"); + return false; + } + if(($user_roles = $data->get_user_roles()) === false){ + $this->erreur("Impossible de lire les roles de l'utilisateur courant"); + return false; + } + if(!$user_roles){ + $this->erreur("L'utilisateur courant n'a aucun role"); + return false; + } + if( + ( + $action_roles = $data->get_action_roles( + $etat["mod"], + $etat["controller"], + $etat["action"] + ) + ) === false + ){ + $this->erreur("Impossible de lire les roles des actions en base"); + return false; + } + foreach($user_roles as $id_role){ + $OK = $this->config("default_allow"); + $action = $etat["mod"]; + if(isset($action_roles[$action])){ + $OK = + (isset($action_roles[$action][0]) && $action_roles[$action][0]) + || (isset($action_roles[$action][$id_role]) && $action_roles[$action][$id_role]); + } + if(!$OK){ + $action = $etat["mod"]."/".$etat["controller"]; + if(isset($action_roles[$action])){ + $OK = + (isset($action_roles[$action][0]) && $action_roles[$action][0]) + || (isset($action_roles[$action][$id_role]) && $action_roles[$action][$id_role]); + } + } + if(!$OK){ + $action = $etat["mod"]."/".$etat["controller"]."/".$etat["action"]; + if(isset($action_roles[$action])){ + $OK = + (isset($action_roles[$action][0]) && $action_roles[$action][0]) + || (isset($action_roles[$action][$id_role]) && $action_roles[$action][$id_role]); } - else $this->erreur("Impossible de lire les status des actions en base"); } - else $this->erreur("Impossible de lire le statut de l'utilisateur courant"); + if($OK) break; } - else $this->erreur("etat invalide"); return $OK; } - function run($etat, $valid_status = true, $params = array(), $method = "GET"){ - if($this->set_etat($etat, $valid_status)){ + function run($etat, $valid_role = true, $params = array(), $method = "GET"){ + if($this->set_etat($etat, $valid_role)){ $controller_file = "mods/".$this->etat("mod")."/".$this->etat("controller").".php"; if($this->app_file_exists($controller_file = "mods/".$this->etat("mod")."/".$this->etat("controller").".php", "DESC")){ if(!class_exists("mw_mod")) require $this->app_file("mods/mw_mod.php"); @@ -142,7 +152,13 @@ } if(($controller_validate = $controller->validate($this)) === true){ if(($controller_prepare_inputs = $controller->prepare_inputs($this)) === true){ + $etat_before = $this->etat; + $this->call_observers("before_action"); $controller->$action_method($this); + $etat_after = $this->etat; + $this->etat = $etat_before; + $this->call_observers("after_action"); + $this->etat = $etat_after; } else $this->erreur($controller_prepare_inputs); } @@ -157,7 +173,18 @@ else $this->erreur("Impossible d'effectuer cette action"); } - function etat($name){ + function is_running($etat){ + if($etat = $this->valid_etat($etat)){ + return + ($etat["mod"] == $this->etat("mod")) + && ($etat["controller"] == $this->etat("controller")) + && ($etat["action"] == $this->etat("action")); + } + return false; + } + + function etat($name = null){ + if(!isset($name)) return $this->etat; return $this->etat[$name]; }