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; } } ?>