- 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]);
+ 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]);
+ }
+ }
+ if($OK) break;
+ }
+ return $OK;
+ }
+
+ function run($etat, $valid_role = true, $params = array(), $method = "GET"){
+ if($this->set_etat($etat, $valid_role)){
+ if($controller = $this->get_controller($this->etat("mod")."/".$this->etat("controller"))){
+ $action_method = $this->etat("action");
+ if(method_exists($controller, $action_method)){
+ foreach($params as $key => $value){
+ switch(strtolower($method)){
+ case "get": $_GET[$this->param($key)] = $value; break;
+ case "post": $_POST[$key] = $value; break;
+ default: break;