diff --git a/jsonEncode.php b/jsonEncode.php index da5db46dc21267673d2ed4c9e9580309a6282458..568c53dd3e8b92b94c0af849e1ab0d15e01c0be9 100644 --- a/jsonEncode.php +++ b/jsonEncode.php @@ -1,6 +1,6 @@ <?php // Fichier de test -$deTest['type'] = "identifier"; -$deTest['name'] = "test"; +$deTest['type'] = "user"; +$deTest['id'] = "1"; echo urlencode(json_encode($deTest)); \ No newline at end of file diff --git a/vbcms-admin/backTasks.php b/vbcms-admin/backTasks.php index 520f18035dfb0489518dfacdc2cfab25a1e1d7f6..b7a2fc32c701ab8d7c4ccf0776f752ca7e568f59 100644 --- a/vbcms-admin/backTasks.php +++ b/vbcms-admin/backTasks.php @@ -182,11 +182,48 @@ if (isset($_GET["getNotifications"])) { $localAccountExist = $localAccountExist->fetch(PDO::FETCH_ASSOC); echo json_encode($localAccountExist); -} elseif (isset($_GET["changeUserGroup"])&&!empty($_GET["changeUserGroup"]) && verifyUserPermission($_SESSION['user_id'], "vbcms", 'manageUsersSettings')){ +} elseif (isset($_GET["changeUserGroup"])&&!empty($_GET["changeUserGroup"]) && verifyUserPermission($_SESSION['user_id'], "vbcms", 'manageUsersSettings')){ $modificationDetail = json_decode($_GET["changeUserGroup"], true); $query = $bdd->prepare("UPDATE `vbcms-users` SET `groupId` = ? WHERE `vbcms-users`.`netId` = ?"); $query->execute([$modificationDetail['groupId'], $modificationDetail['netId']]); +} elseif (isset($_GET["getPermissions"]) && verifyUserPermission($_SESSION['user_id'], "vbcms", 'viewPermissions')){ + if(!empty($_GET["getPermissions"])){ + if(isJson(urldecode($_GET["getPermissions"]))){ + $requestDetails = json_decode($_GET["getPermissions"], true); + + } + } + $permissions = array(); + $activatedExtensions = $bdd->query("SELECT * FROM `vbcms-activatedExtensions`")->fetchAll(PDO::FETCH_ASSOC); + + // On va ajouter vbcms au début + $vbcmsExt['name'] = 'vbcms'; + array_unshift($activatedExtensions, $vbcmsExt); + foreach ($activatedExtensions as $activatedExtension){ + $permissions[$activatedExtension['name']] = array(); + + if($activatedExtension['name'] == 'vbcms'){ + $extPermissions = getVBcmsPermissions(); + } else { + $ext = new module($activatedExtension['name']); + $extPermissions = $ext->getPermissions(); + } + + foreach ($extPermissions as $permission){ + $permissionDetail['name'] = $permission; + if(isset($requestDetails['type'])&&isset($requestDetails['id'])){ + if($requestDetails['type']=="user"){ + $permissionDetail['access'] = verifyUserPermission($requestDetails['id'], $activatedExtension['name'], $permission); + }elseif($requestDetails['type']=="group"){ + $permissionDetail['access'] = verifyGroupPermission($requestDetails['id'], $activatedExtension['name'], $permission); + } + } + array_push($permissions[$activatedExtension['name']], $permissionDetail); + } + } + echo json_encode($permissions); + } 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"]]); diff --git a/vbcms-admin/css/manager.css b/vbcms-admin/css/manager.css index f7364144fa4647310b9e7fb82e3989731f3f2a6b..2add6ec0cc9c824a9170c70217a8b10043c74dd2 100644 --- a/vbcms-admin/css/manager.css +++ b/vbcms-admin/css/manager.css @@ -792,6 +792,10 @@ header .menu-item{ cursor: pointer; } +.userCard.active{ + background-color: #e6e6e6; +} + .userCard .userProfilPic{ height: 56px; width: 56px; diff --git a/vbcms-admin/includes/settings/groups.php b/vbcms-admin/includes/settings/groups.php index f4e3f7f14ed2683b85b6ec0bc5f6ffa33f194a50..0ec459c6dc8f94a093ca1f506b7837337fc13730 100644 --- a/vbcms-admin/includes/settings/groups.php +++ b/vbcms-admin/includes/settings/groups.php @@ -6,7 +6,7 @@ </div> <div class="d-flex p-4"> - <div style="min-width:360px;"> + <div class="p-2" style="min-width:360px;"> <h5>Groupes</h5> <table style="width:100%;"> <tbody> @@ -20,7 +20,7 @@ $usersCount->execute([$userGroup['groupId']]); $usersCount=$usersCount->fetchColumn(); - echo('<tr class="userCard" style="height:2em;"> + echo('<tr class="userCard" id="group-'.$userGroup['groupId'].'" onclick="selectGroup('.$userGroup['groupId'].')" style="height:2em;"> <th> <span>'.translate($userGroup['groupName']).'</span> </th> @@ -36,8 +36,34 @@ </tbody> </table> </div> - <div class="flex-fill"> + <div class="flex-fill p-2"> <h5>Permissions</h5> + <form id="permsForm"> + <?php + // Fait en JS + /* + $activatedExtensions = $bdd->query("SELECT * FROM `vbcms-activatedExtensions`")->fetchAll(PDO::FETCH_ASSOC); + foreach ($activatedExtensions as $activatedExtension){ + $ext = new module($activatedExtension['name']); + $permissions = $ext->getPermissions(); + foreach ($permissions as $permission){ + $hasPerm = verifyGroupPermission(1, $activatedExtension['name'], $permission); + if($hasPerm) $hasPerm = "checked"; + $inputName['extension'] = $activatedExtension['name']; + $inputName['permission'] = $permission; + echo('<div> + <h5 class="text-brown border-bottom">'.$activatedExtension['name'].'</h5> + <div class="form-check"> + <input class="form-check-input" type="checkbox" name="'.urlencode(json_encode($inputName)).'" '.$hasPerm.'> + <label class="form-check-label">'.$permission.'</label> + </div> + </div>'); + } + } + */ + ?> + + </form> </div> </div> </div> @@ -61,6 +87,20 @@ </div> <script type="text/javascript"> +$( document ).ready(function() { + // On va récupérer l'url et ses paramètres + let url = new URL(window.location.href); + let search_params = url.searchParams; + + // On récupère les infos de la requête + if(search_params.get('selectedGroup')==null){ + selectGroup(1); + } else { + selectGroup(search_params.get('selectedGroup')); + } + +}); + $(function() { $('.userCard').hover(function() { $(this).find('.roundedLink').css('background-color', 'var(--mainBrown)'); @@ -83,4 +123,56 @@ $(document).click(function(event) { $('#plusMenu').css("display", "none"); } }); + +function selectGroup(id){ + // On va récupérer l'url et ses paramètres + let url = new URL(window.location.href); + let search_params = url.searchParams; + + if(search_params.get('selectedGroup')!=null){ + $("#group-"+search_params.get('selectedGroup')).removeClass("active"); + } + // Et on modifie le paramètre + search_params.set('selectedGroup', id); + let newUrl = url.toString(); + window.history.replaceState({}, '', newUrl); + + var array = { + type: "group", + id: id + }; + + $.get("<?=VBcmsGetSetting("websiteUrl")?>vbcms-admin/backTasks/?getPermissions="+encodeURIComponent(JSON.stringify(array)), function(data) { + // On supprime l'animation de chargement + $("#group-"+id).addClass("active"); + // Et on insère le contenu + $("#permsForm").html(""); + if (!isJson(data)){ + $("#permsForm").append('<h5><?=translate('error')?>: <?=translate('thisIsNotJSON')?></h5><br>'+data); + }else{ + var json = JSON.parse(data); + $.each( json, function( extension, permissionList ) { + $('#permsForm').append('<div>\ + <h5 class="text-brown border-bottom">'+extension+'</h5>'); + $.each( permissionList, function( index, permission ){ + if(permission.access == true){ + var hasPerm = "checked"; + } else { + var hasPerm = null; + } + + var inputName = { + extension: extension, + permission: permission.name + }; + $("#permsForm").append('<div class="form-check">\ + <input class="form-check-input" type="checkbox" name="'+encodeURIComponent(JSON.stringify(inputName))+'" '+hasPerm+'>\ + <label class="form-check-label">'+permission.name+'</label>\ + </div>'); + }); + $('#permsForm').append('</div>'); + }); + } + }); +} </script> \ No newline at end of file diff --git a/vbcms-content/extensions/vbcms-filemanager/init.php b/vbcms-content/extensions/vbcms-filemanager/init.php index c16c973c4efba5d08c22413d31ddd0cbebbc37a0..30dca3ec5aee50d200c60c6c5acfb648c3a3b40d 100644 --- a/vbcms-content/extensions/vbcms-filemanager/init.php +++ b/vbcms-content/extensions/vbcms-filemanager/init.php @@ -8,5 +8,7 @@ if(isset($initCall)&&!empty($initCall)){ } elseif($initCall[0]=="getSettingsHTML"){ // $initCall[1] contient les paramètres echo('<h5>C\'est bien la page du filemanager</h5>'); - } + } elseif($initCall[0]=="getPermissions"){ + include 'permissions.php'; + } } \ No newline at end of file diff --git a/vbcms-content/extensions/vbcms-filemanager/permissions.php b/vbcms-content/extensions/vbcms-filemanager/permissions.php new file mode 100644 index 0000000000000000000000000000000000000000..d749d91a473ea69a5ba58624afc3650992b20d3c --- /dev/null +++ b/vbcms-content/extensions/vbcms-filemanager/permissions.php @@ -0,0 +1,4 @@ +<?php +$permissions = [ + 'access-browse' +]; \ No newline at end of file diff --git a/vbcms-content/translations/FR.php b/vbcms-content/translations/FR.php index 9adaffa1dfe498393fb4073f4e7b97dbd7d9c556..7b2076b1d38720893b45708f5f203370361ca03a 100644 --- a/vbcms-content/translations/FR.php +++ b/vbcms-content/translations/FR.php @@ -54,7 +54,7 @@ $translation["cancel"] = "Annuler"; $translation["visualize"] = "Visualiser"; $translation["commands"] = "Commandes"; $translation["rename"] = "Renommer"; -$translation["sample"] = "sample"; +$translation["error"] = "Erreur"; $translation["sample"] = "sample"; $translation["sample"] = "sample"; $translation["sample"] = "sample"; @@ -102,7 +102,7 @@ $translation["inviteSent"] = "Invitation envoyée!"; $translation["modifyProperties"] = "Modifier les propriétés"; $translation["noParametersGiven"] = "Aucun paramètre de donné"; $translation["noNameGiven"] = "Aucun nom de donné"; -$translation["thisIsNotJSON"] = "Ce n'est pas du JSON"; +$translation["thisIsNotJSON"] = "Ce n\'est pas du JSON"; $translation["unknownType"] = "Type inconnu"; $translation["alreadyUsed"] = "Déjà utilisé"; $translation["noCommandSpecified"] = "Aucune commande de spcécifiée"; diff --git a/vbcms-core/classes.php b/vbcms-core/classes.php index 854f866dd3fe80cb7e1cc837b6e8a117eb6fc3cd..afeebaeda695c08d98cfe980dd1680654dff37f6 100644 --- a/vbcms-core/classes.php +++ b/vbcms-core/classes.php @@ -438,6 +438,9 @@ class module { // Cette fonction permet de réucpérer la liste des permissions de l'extension function getPermissions(){ - echo 'test'; + $initCall[0] = "getPermissions"; + include $GLOBALS['vbcmsRootPath'].'/vbcms-content/extensions/'.$this->path."/init.php"; + if(!isset($permissions)) $permissions = array(); + return $permissions; } } diff --git a/vbcms-core/functions.php b/vbcms-core/functions.php index 470d91020ca16931054d27939badeefa1950ccca..4f1d91ee6f127515f701f804e3aa0826aa470a22 100644 --- a/vbcms-core/functions.php +++ b/vbcms-core/functions.php @@ -178,7 +178,7 @@ function adminNavbarAddItem($moduleName, $icon, $name, $link){ } // Permet de vérifier qu'un utilisateur a bien les permissions pour visualiser ou effectuer une tâche -function verifyUserPermission($userId, $extensionName, $action){ +function verifyUserPermission($userId, $extensionName, $permission){ global $bdd; // On va récupérer les infos de l'utilisateur $userInfos = $bdd->prepare("SELECT * FROM `vbcms-users` WHERE netId=?"); @@ -186,36 +186,45 @@ function verifyUserPermission($userId, $extensionName, $action){ $userInfos = $userInfos->fetch(PDO::FETCH_ASSOC); // On va vérifier s'il a des perms à part - $usersPerms = $bdd->prepare("SELECT * FROM `vbcms-usersPerms` WHERE userId=? AND extensionName=?"); - $usersPerms->execute([$userId, $extensionName]); - $perms = $usersPerms->fetch(PDO::FETCH_ASSOC); + $usersPerms = $bdd->prepare("SELECT * FROM `vbcms-usersPerms` WHERE userId=? AND extensionName=? AND permission=?"); + $usersPerms->execute([$userId, $extensionName, $permission]); + $hasPerm = $usersPerms->fetch(PDO::FETCH_ASSOC); - if(empty($perms)){ + if(empty($hasPerm)){ // Il n'a pas de perms à part - // On va maintenant récupérer les infos de son groupe - $groupInfos = $bdd->prepare("SELECT * FROM `vbcms-userGroups` WHERE groupId=?"); - $groupInfos->execute([$userInfos['groupId']]); - $groupInfos = $groupInfos->fetch(PDO::FETCH_ASSOC); - - // Et maintenant les perms - if(!empty($groupInfos)){ - if($groupInfos['groupName'] == "superadmins") return true; // Les superadmins ont tous les droits, pas besoin de spécifier leur perms - - $groupsPerms = $bdd->prepare("SELECT * FROM `vbcms-groupsPerms` WHERE netId=? AND extensionName=?"); - $groupsPerms->execute([$groupInfos['groupId'], $extensionName]); - $perms = $groupsPerms->fetch(PDO::FETCH_ASSOC); - } - } - - if(!empty($perms)){ + // On va maintenant vérifier avec le groupe + return verifyGroupPermission($userInfos['groupId'], $extensionName, $permission); + }else{ $perms = json_decode($perms, true); if($perms[$action]) return true; else return false; - } else { - return false; } } +function verifyGroupPermission($groupId, $extensionName, $permission){ + global $bdd; + // On va récupérer les infos du groupe + $groupInfos = $bdd->prepare("SELECT * FROM `vbcms-userGroups` WHERE groupId=?"); + $groupInfos->execute([$groupId]); + $groupInfos = $groupInfos->fetch(PDO::FETCH_ASSOC); + + // Et maintenant les perms + if(!empty($groupInfos)){ + if($groupInfos['groupName'] == "superadmins") return true; // Les superadmins ont tous les droits, pas besoin de spécifier leur perms + + $groupsPerms = $bdd->prepare("SELECT * FROM `vbcms-groupsPerms` WHERE groupId=? AND extensionName=? AND permission=?"); + $groupsPerms->execute([$groupInfos['groupId'], $extensionName, $permission]); + $hasPerm = $groupsPerms->fetch(PDO::FETCH_ASSOC); + if(!empty($hasPerm)) return true; + else return false; // N'a pas la perm + } else return false; // Le groupe n'existe pas, donc pas de perm +} + +function getVBcmsPermissions(){ + include $GLOBALS['vbcmsRootPath'].'/vbcms-core/permissions.php'; + return $permissions; +} + ///////////////////////////////// // FONCTIONS DES MODULES DE BASES ///////////////////////////////// diff --git a/vbcms-core/permissions.php b/vbcms-core/permissions.php new file mode 100644 index 0000000000000000000000000000000000000000..271171ef3e39ecd040969598b5c033c69f5398b4 --- /dev/null +++ b/vbcms-core/permissions.php @@ -0,0 +1,10 @@ +<?php +$permissions = [ + 'manageUsersSettings', + 'viewPermissions', + 'access-generalSettings', + 'manageUsersSettings', + 'manageuserGroupsSettings', + 'permissionsSettings', + 'extAndWsSettings' +]; \ No newline at end of file