MACHINE) * * @id_target UID d'un groupe MACHINE * @id_source UID d'un groupe UTILISATEUR * @id_action UID d'une ACTION * * @return error Retourne l'erreur 'ManagerError' associée * */ public static function addPermission($id_target, $id_source, $id_action){ /* [1] On vérifie l'existance du groupe 'target' =========================================================*/ /* (1) On rédige la requête */ $targetCheckR = new Repo('cluster/getById', [ $_SESSION['WAREHOUSE']['id'], $id_target ]); $targetCheck = $targetCheckR->answer(); /* (2) Si aucun résultat, on retourne une erreur */ if( $targetCheck === false ) return ManagerError::NoMatchFound; /* (3) Si il s'agit bien d'un groupe de machines */ if( $targetCheck['class'] != clusterRepo::MACHINE_CLASS ) return ManagerError::NoMatchFound; /* [2] On vérifie l'existance du groupe 'source' =========================================================*/ /* (1) On rédige la requête */ $sourceCheckR = new Repo('cluster/getById', [ $_SESSION['WAREHOUSE']['id'], $id_source ]); $sourceCheck = $sourceCheckR->answer(); /* (2) Si aucun résultat, on retourne une erreur */ if( $sourceCheck === false ) return ManagerError::NoMatchFound; /* (3) Si il s'agit bien d'un groupe d'utilisateurs */ if( $sourceCheck['class'] != clusterRepo::USER_CLASS ) return ManagerError::NoMatchFound; /* [3] On vérifie l'existance de l'action =========================================================*/ /* (1) On rédige la requête */ $actionCheckR = new Repo('action/getById', [ $id_action ]); $actionCheck = $actionCheckR->answer(); /* (2) Si aucun résultat, on retourne une erreur */ if( $actionCheck === false ) return ManagerError::NoMatchFound; /* [4] On vérifie que l'entrée n'existe pas déja =========================================================*/ /* (1) On effectue la requête */ $checkAlready = self::getByIdTarget($id_target); /* (2) Si on a un résultat, on continue la vérification */ if( is_array($checkAlready) && count($checkAlready) > 0 ){ /* (3) Si les données sont identiques pour au moins une entrée, on retourne un succès */ foreach($checkAlready as $s=>$sameTarget) if( $sameTarget['id_source'] == $id_source && $sameTarget['id_action'] == $id_action ) return ManagerError::Success; } /* [5] On ajoute la action =========================================================*/ /* (1) On effectue l'insertion */ $insert = Database::getPDO()->prepare("INSERT INTO action_merge(id_action_merge, id_target, id_source, id_action) VALUES(DEFAULT, :id_target, :id_source, :id_action)"); $inserted = $insert->execute([ ':id_target' => $id_target, ':id_source' => $id_source, ':id_action' => $id_action ]); /* (2) Si erreur SQL, on retourne une erreur */ if( !$inserted ) return ManagerError::RepoError; return ManagerError::Success; } /* SUPPRESSION D'UNE PERMISSION ENTRE 2 GROUPES (UTIL -> MACHINE) * * @id_target UID d'un groupe MACHINE * @id_source UID d'un groupe UTILISATEUR * @id_action UID d'une PERMISSION * * @return error Retourne l'erreur 'ManagerError' associée * */ public static function removePermission($id_target, $id_source, $id_action){ /* [1] On vérifie que l'entrée existe =========================================================*/ /* (1) On effectue la requête */ $checkExists = self::getByIdTarget($id_target); /* (2) Si on a un résultat correspondant aux données, c'est bon */ $existingId = null; if( is_array($checkExists) && count($checkExists) > 0 ){ /* (3) Si les données sont identiques pour au moins une entrée, on peut supprimer */ foreach($checkExists as $s=>$sameTarget) if( $sameTarget['id_source'] == $id_source && $sameTarget['id_action'] == $id_action ) $existingId = $sameTarget['id_action_merge']; } /* (3) Si on a pas trouvé, on retourne une erreur */ if( is_null($existingId) ) return ManagerError::NoMatchFound; /* [2] On supprime la action =========================================================*/ /* (1) On effectue la suppression */ $delete = Database::getPDO()->prepare("DELETE FROM action_merge WHERE id_action_merge = :id_action_merge AND id_target = :id_target AND id_source = :id_source AND id_action = :id_action"); $deleted = $delete->execute([ ':id_action_merge' => $existingId, ':id_target' => $id_target, ':id_source' => $id_source, ':id_action' => $id_action ]); /* (2) Si erreur SQL, on retourne une erreur */ if( !$deleted || self::getById($existingId) !== false ) return ManagerError::RepoError; return ManagerError::Success; } } ?>