From a315650fbc2b5ede7f0697122ce2b880136e9386 Mon Sep 17 00:00:00 2001
From: SofianeLasri <alasri250@gmail.com>
Date: Thu, 12 Aug 2021 14:05:40 +0200
Subject: [PATCH] =?UTF-8?q?14H05=20-=20Base=20des=20perms=20de=20groupes?=
 =?UTF-8?q?=20termin=C3=A9e?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 vbcms-admin/backTasks.php                | 29 +++++++++++++++++++++++-
 vbcms-admin/includes/settings/groups.php | 25 +++++++++++++++++++-
 vbcms-admin/includes/settingsPage.php    |  2 +-
 vbcms-core/permissions.php               |  5 ++--
 4 files changed, 56 insertions(+), 5 deletions(-)

diff --git a/vbcms-admin/backTasks.php b/vbcms-admin/backTasks.php
index b7a2fc3..047d598 100644
--- a/vbcms-admin/backTasks.php
+++ b/vbcms-admin/backTasks.php
@@ -224,7 +224,34 @@ if (isset($_GET["getNotifications"])) {
 	}
 	echo json_encode($permissions);
 	
-} elseif (isset($_GET["setNetIdLocalAccount"])&&!empty($_GET["setNetIdLocalAccount"]) && (isset($_POST)&&!empty($_POST))  && verifyUserPermission($_SESSION['user_id'], "vbcms", 'manageUsersSettings')) {
+} elseif (isset($_GET["editPermissions"])&&!empty($_GET["editPermissions"]) && verifyUserPermission($_SESSION['user_id'], "vbcms", 'editPermissions')) {
+	if(isJson(urldecode($_GET["editPermissions"]))){
+		$requestDetails = json_decode($_GET["editPermissions"], true);
+
+		if($requestDetails['type'] == 'group' && $requestDetails['id']!=1){ // Le groupe n°1 étant celui des superadmins, ils auront tj tous les droits
+			$query = $bdd->prepare('DELETE FROM `vbcms-groupsPerms` WHERE groupId=?'); // On vide les perms du groupe
+			$query->execute([$requestDetails['id']]);
+			foreach($_POST as $permissionJson => $checked) { // Puis on les recréées
+				$permissionDetail = json_decode(urldecode($permissionJson), true);
+				$query = $bdd->prepare('INSERT INTO `vbcms-groupsPerms` (`groupId`, `extensionName`, `permission`) VALUES (?,?,?)');
+				$query->execute([$requestDetails['id'], $permissionDetail['extension'], $permissionDetail['permission']]);
+			}
+		}elseif($requestDetails['type'] == 'user'){
+			$query = $bdd->prepare('DELETE FROM `vbcms-usersPerms` WHERE userId=?'); // On vide les perms du groupe
+			$query->execute([$requestDetails['id']]);
+			foreach($_POST as $permissionJson => $checked) { // Puis on les recréées
+				$permissionDetail = json_decode(urldecode($permissionJson), true);
+				$query = $bdd->prepare('INSERT INTO `vbcms-usersPerms` (`userId`, `extensionName`, `permission`) VALUES (?,?,?)');
+				$query->execute([$requestDetails['id'], $permissionDetail['extension'], $permissionDetail['permission']]);
+			}
+		}else{
+			echo 'Paramètre non reconnu.';
+		}
+		
+	} else {
+		echo translate('error').': '.translate('thisIsNotJSON');
+	}
+} elseif (isset($_GET["setNetIdLocalAccount"])&&!empty($_GET["setNetIdLocalAccount"]) && (isset($_POST)&&!empty($_POST)) && verifyUserPermission($_SESSION['user_id'], "vbcms", 'manageUsersSettings')) {
 	$localAccountExist = $bdd->prepare("SELECT * FROM `vbcms-localAccounts` WHERE netIdAssoc = ?");
 	$localAccountExist->execute([$_GET["setNetIdLocalAccount"]]);
 	$localAccountExist = $localAccountExist->fetch(PDO::FETCH_ASSOC);
diff --git a/vbcms-admin/includes/settings/groups.php b/vbcms-admin/includes/settings/groups.php
index 0ec459c..e555b54 100644
--- a/vbcms-admin/includes/settings/groups.php
+++ b/vbcms-admin/includes/settings/groups.php
@@ -166,7 +166,7 @@ function selectGroup(id){
                         permission: permission.name
                     };
                     $("#permsForm").append('<div class="form-check">\
-                                        <input class="form-check-input" type="checkbox" name="'+encodeURIComponent(JSON.stringify(inputName))+'" '+hasPerm+'>\
+                                        <input class="form-check-input" type="checkbox" name="'+encodeURIComponent(JSON.stringify(inputName))+'" onclick="editPermissions('+id+')" '+hasPerm+'>\
                                         <label class="form-check-label">'+permission.name+'</label>\
                                     </div>');
                 });
@@ -175,4 +175,27 @@ function selectGroup(id){
         }
     });
 }
+
+function editPermissions(id){
+    var array = {
+        type: "group",
+        id: id
+    };
+
+    $.post( "<?=VBcmsGetSetting("websiteUrl")?>vbcms-admin/backTasks?editPermissions="+encodeURIComponent(JSON.stringify(array)), $( "#permsForm" ).serialize() )
+    .done(function( data ) {
+        if(data!=""){
+            SnackBar({
+                message: data,
+                status: "danger",
+                timeout: false
+            });
+        } else {
+            SnackBar({
+                message: '<?=translate("success-saving")?>',
+                status: "success"
+            });
+        }
+    });
+}
 </script>
\ No newline at end of file
diff --git a/vbcms-admin/includes/settingsPage.php b/vbcms-admin/includes/settingsPage.php
index 942c4de..84aeb0d 100644
--- a/vbcms-admin/includes/settingsPage.php
+++ b/vbcms-admin/includes/settingsPage.php
@@ -62,7 +62,7 @@ function getSettingsHTML($params){
                     include "settings/general.php";    
                 }elseif($params=="users" && verifyUserPermission($_SESSION['user_id'], "vbcms", 'manageUsersSettings')){ 
                     include "settings/users.php"; 
-                }elseif($params=="userGroups" && verifyUserPermission($_SESSION['user_id'], "vbcms", 'manageuserGroupsSettings')){ 
+                }elseif($params=="userGroups" && verifyUserPermission($_SESSION['user_id'], "vbcms", 'manageUserGroupsSettings')){ 
                     include "settings/groups.php"; 
                 } ?>
     </div>
diff --git a/vbcms-core/permissions.php b/vbcms-core/permissions.php
index 271171e..841a9dd 100644
--- a/vbcms-core/permissions.php
+++ b/vbcms-core/permissions.php
@@ -1,10 +1,11 @@
 <?php
 $permissions = [
-    'manageUsersSettings',
+    'accessAdmin',
     'viewPermissions',
+    'editPermissions',
     'access-generalSettings',
     'manageUsersSettings',
-    'manageuserGroupsSettings',
+    'manageUserGroupsSettings',
     'permissionsSettings',
     'extAndWsSettings'
 ];
\ No newline at end of file
-- 
GitLab