From 2bb68b7d0ac3c276144791de17543b9b858384e4 Mon Sep 17 00:00:00 2001 From: xdrm-brackets Date: Fri, 15 Jul 2016 17:43:47 +0200 Subject: [PATCH] =?UTF-8?q?Cr=C3=A9ation=20et=201re=20impl=C3=A9mentation?= =?UTF-8?q?=20des=20repositories=20'association'=20et=20'permission'=20pou?= =?UTF-8?q?r=20la=20gestion=20des=20permissions=20des=20groupes=20d'utilis?= =?UTF-8?q?ateurs=20sur=20les=20groupes=20de=20machines=20+=20M=C3=A0j=20d?= =?UTF-8?q?u=20repo=20'parentRepo'=20pour=20=C3=A0=20partir=20d'un=20nom?= =?UTF-8?q?=20du=20type=20'getByMyNewWord'=20il=20trouve=20'my=5Fnew=5Fwor?= =?UTF-8?q?d'=20en=20nom=20de=20colonne?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/repositories.json | 15 +++++ manager/repo/association.php | 116 +++++++++++++++++++++++++++++++++++ manager/repo/parentRepo.php | 13 +++- manager/repo/permission.php | 15 +++++ test/automate.php | 9 ++- view/groups.php | 2 +- view/js/groups-min.js | 2 +- view/js/groups.js | 5 ++ 8 files changed, 172 insertions(+), 5 deletions(-) create mode 100644 manager/repo/association.php create mode 100644 manager/repo/permission.php diff --git a/config/repositories.json b/config/repositories.json index 6dc8e0a..29cc05f 100755 --- a/config/repositories.json +++ b/config/repositories.json @@ -51,6 +51,21 @@ ], + "association": [ + "addPermission", + "removePermission", + + "getAll", + "getById", + "getByIdTarget" + ], + + "permission": [ + "getAll", + "getById" + + ], + "warehouse": [ "create", "edit", diff --git a/manager/repo/association.php b/manager/repo/association.php new file mode 100644 index 0000000..fd14ec5 --- /dev/null +++ b/manager/repo/association.php @@ -0,0 +1,116 @@ + 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; + } + + + + + + + + } + + +?> diff --git a/manager/repo/parentRepo.php b/manager/repo/parentRepo.php index 9c5b896..5238f5b 100644 --- a/manager/repo/parentRepo.php +++ b/manager/repo/parentRepo.php @@ -48,7 +48,18 @@ /* [3] On vérifie que la valeur après 'get' est dans $table_columns =========================================================*/ - $columnName = strtolower($matches[1]); + $columnName = ''; + + for( $l = 0 ; $l < strlen($matches[1]) ; $l++ ){ + $letter = $matches[1][$l]; + + // Si la lettre est en majuscule mais que c'est pas la première + if( strtoupper($letter) == $letter && $l > 0 ) + $columnName .= '_'; + + $columnName .= strtolower($letter); + } + $getAll = count($matches) > 2; // Si 'getAll' $getById = $columnName == 'id'; diff --git a/manager/repo/permission.php b/manager/repo/permission.php new file mode 100644 index 0000000..f18c17c --- /dev/null +++ b/manager/repo/permission.php @@ -0,0 +1,15 @@ + diff --git a/test/automate.php b/test/automate.php index afc83e7..73bcbc4 100755 --- a/test/automate.php +++ b/test/automate.php @@ -330,8 +330,13 @@ }//createWarehouse(); debug(); - $myView = new View('group.view', []); - $myView->view(); + $req = new Repo('association/addPermission', [ + 205, + 1, + 1 + ]); + + var_dump( $req->answer() ); ?> diff --git a/view/groups.php b/view/groups.php index 07762ec..b91e983 100755 --- a/view/groups.php +++ b/view/groups.php @@ -194,6 +194,6 @@ =========================================================*/ echo "
"; - + echo '
'; diff --git a/view/js/groups-min.js b/view/js/groups-min.js index f037cc7..81b1972 100644 --- a/view/js/groups-min.js +++ b/view/js/groups-min.js @@ -1,5 +1,5 @@ var section={view:{text:'#CONTAINER > section[data-sublink="view"] ',element:document.querySelector('#CONTAINER > section[data-sublink="view"]'),searchbar:document.querySelector('#CONTAINER > section[data-sublink="view"] > .searchbar')},create:{text:'#CONTAINER > section[data-sublink="create"] ',element:document.querySelector('#CONTAINER > section[data-sublink="create"]')},remove:{text:'#CONTAINER > section[data-sublink="remove"] ',element:document.querySelector('#CONTAINER > section[data-sublink="remove"]')}, -edit:{text:'#CONTAINER > section[data-sublink="edit"] ',element:document.querySelector('#CONTAINER > section[data-sublink="edit"]')},filter:{text:'#CONTAINER > section[data-sublink="filter"] ',element:document.querySelector('#CONTAINER > section[data-sublink="filter"]')}}; +edit:{text:'#CONTAINER > section[data-sublink="edit"] ',element:document.querySelector('#CONTAINER > section[data-sublink="edit"]')},filter:{text:'#CONTAINER > section[data-sublink="filter"] ',element:document.querySelector('#CONTAINER > section[data-sublink="filter"]')},permissions:{text:'#CONTAINER > section[data-sublink="permissions"] ',element:document.querySelector('#CONTAINER > section[data-sublink="permissions"]')}}; if(null!=section.view.element){1 article.inline-box[id]");for(c=0;c section[data-sublink="filter"] ', element: document.querySelector('#CONTAINER > section[data-sublink="filter"]') + }, + + permissions: { + text: '#CONTAINER > section[data-sublink="permissions"] ', + element: document.querySelector('#CONTAINER > section[data-sublink="permissions"]') } };