MACHINE) * * @id_target UID d'un groupe MACHINE * @id_source UID d'un groupe UTILISATEUR * @id_permission UID d'une PERMISSION * * @return error Retourne l'erreur 'ManagerError' associée * */ public static function addPermission($id_target, $id_source, $id_permission){ /* [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 la permission =========================================================*/ /* (1) On rédige la requête */ $permissionCheckR = new Repo('permission/getById', [ $id_permission ]); $permissionCheck = $permissionCheckR->answer(); /* (2) Si aucun résultat, on retourne une erreur */ if( $permissionCheck === 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_permission'] == $id_permission ) return ManagerError::Success; } /* [5] On ajoute la permission =========================================================*/ /* (1) On effectue l'insertion */ $insert = Database::getPDO()->prepare("INSERT INTO association(id_association, id_target, id_source, id_permission) VALUES(DEFAULT, :id_target, :id_source, :id_permission)"); $inserted = $insert->execute([ ':id_target' => $id_target, ':id_source' => $id_source, ':id_permission' => $id_permission ]); /* (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_permission UID d'une PERMISSION * * @return error Retourne l'erreur 'ManagerError' associée * */ public static function removePermission($id_target, $id_source, $id_permission){ /* [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_permission'] == $id_permission ) $existingId = $sameTarget['id_association']; } /* (3) Si on a pas trouvé, on retourne une erreur */ if( is_null($existingId) ) return ManagerError::NoMatchFound; /* [2] On supprime la permission =========================================================*/ /* (1) On effectue la suppression */ $delete = Database::getPDO()->prepare("DELETE FROM association WHERE id_association = :id_association AND id_target = :id_target AND id_source = :id_source AND id_permission = :id_permission"); $deleted = $delete->execute([ ':id_association' => $existingId, ':id_target' => $id_target, ':id_source' => $id_source, ':id_permission' => $id_permission ]); /* (2) Si erreur SQL, on retourne une erreur */ if( !$deleted || self::getById($existingId) !== false ) return ManagerError::RepoError; return ManagerError::Success; } } ?>