Aller au contenu

Tests d'accès et d'administration

Les recettes complètes de l'onglet World Edit > Immobilier, des permissions dédiées, des modales F10/web, de la recovery et des audits se trouvent dans Bâtiments.

ADM-WEB-UI-001 — Modales administratives web

Prérequis : un compte Founder et des données permettant transfert, édition, suppression et redémarrage FiveM.

  1. Déclencher toutes les actions qui demandent une saisie ou confirmation dans les pages Personnages, Inventaires, Modération et World Edit.
  2. Tester Annuler, Échap, validation HTML, confirmation destructive et navigation clavier.

Attendu : seules les modales Medusa sont utilisées ; aucun alert, confirm ou prompt natif n'apparaît, une annulation ne produit aucune mutation et les actions confirmées conservent leur comportement et leurs permissions historiques.

ADM-WEB-MOD-001 — Contrats des modules et fragments

Prérequis : Node.js disponible et sources de l'administration présentes.

  1. Exécuter node admin/tests/module-graph.mjs.
  2. Exécuter node admin/tests/html-contracts.mjs.
  3. Exécuter node --check sur admin/public/app.js et tous les fichiers sous admin/public/js/.

Attendu : imports locaux, graphe, factories, panels, SSI, IDs et cibles sont valides.

ADM-WEB-MOD-002 — Parité après modularisation

Prérequis : image admin reconstruite, comptes Founder, permission partielle et sans permission.

  1. Tester connexion, déconnexion et premier panneau autorisé avec les trois profils.
  2. Ouvrir les 25 panneaux, filtres, formulaires et actions destructives.
  3. Depuis Personnage, ouvrir Inventaires puis ARPhone.
  4. Tester logs, arbre de compétences, météo, crafting et banque.
  5. Demander directement /partials/shell/navigation.html.

Attendu : routes, permissions, contenus, modales et audits sont inchangés; aucun listener n'est dupliqué, aucune erreur d'import/CSP/MIME n'apparaît et le partial direct est refusé.

ADM-WEB-MOD-003 — Contrôles dynamiques des modales

Prérequis : Node.js et données permettant d'ouvrir une modale avec liste déroulante dans Compétences, Buffs, Crafting, ARPhone et une action Personnage.

  1. Exécuter node admin/tests/modal-contracts.mjs et node admin/tests/html-contracts.mjs.
  2. Ouvrir chaque modale ciblée, naviguer au clavier dans son select, changer la valeur puis confirmer ou annuler selon le cas.

Attendu : les tests distinguent input, textarea et select, le dialog SSI est correctement fermé, chaque modale s'ouvre sans exception, reçoit le focus et sérialise la valeur choisie. Une annulation ne produit aucune mutation.

Discord, connexion et whitelist

AUTH-001 — Accès FiveM selon les rôles

Tester successivement un compte Founder, staff, whitelist et sans rôle.

Attendu : les trois premiers entrent ; le dernier est refusé proprement et apparaît dans la liste des candidats.

AUTH-002 — Attribution de whitelist et notes

  1. Avec ADMIN_ALLOW_WHITELIST, ajouter une note au candidat puis l'accepter.
  2. Vérifier Discord, reconnecter le candidat et relire la note.
  3. Rejouer sans la permission.

Attendu : le rôle 1528765498794184704 est réellement attribué, la note persiste et la connexion devient possible. L'utilisateur non autorisé ne voit ni n'exécute l'action.

AUTH-003 — OAuth de l'admin web

  1. Se connecter avec Founder, staff autorisé, membre sans rôle administratif et session Discord refusée/expirée.
  2. Tester la déconnexion puis le retour navigateur.

Attendu : seuls les rôles staff configurés accèdent à l'application ; les modules reflètent les permissions effectives et une session invalide revient à la connexion sans exposer de données.

Rôles et permissions

PERM-001 — Founder et héritage

  1. Vérifier que Founder possède toutes les permissions sans grant explicite.
  2. Créer trois rôles classés et attribuer une permission au rôle inférieur.
  3. Se connecter avec chacun des rôles.

Attendu : Founder reste ultime ; les rôles supérieurs héritent des permissions inférieures et le staff historique ne reçoit aucune permission initiale.

PERM-002 — Limites de délégation

Tenter de créer un rôle, attribuer une permission absente du compte, gérer un rôle supérieur et retirer une permission à un rôle égal ou supérieur.

Attendu : chaque opération interdite est refusée côté serveur, même si la requête est forgée ; les opérations autorisées sont synchronisées avec Discord et auditées.

PERM-003 — Catégories et visibilité

Ouvrir la page Permissions avec plusieurs tailles d'écran, déplier chaque catégorie et comparer les actions du web, de F9/F10 et des commandes.

Attendu : les catégories sont repliables, la navigation principale ne déborde pas et une même permission produit la même autorisation dans toutes les applications.

Contenu et administration

ADMIN-001 — Loading screen

Modifier image, texte, actualités et ordre avec ADMIN_EDIT_LOADING_SCREEN, puis rejoindre FiveM. Rejouer sans permission et avec une URL/image invalide.

Attendu : le contenu publié apparaît dans la disposition 2/3–1/3, l'ordre persiste et l'édition non autorisée est refusée sans casser l'écran de chargement.

ADMIN-002 — Personnages

Rechercher par chaque critère, modifier l'identité, transférer/détacher, demander une recustomisation en ligne puis hors ligne, et supprimer uniquement une donnée de recette.

Attendu : chaque action respecte sa permission dédiée ; l'éditeur s'ouvre immédiatement en ligne ou à la connexion suivante hors ligne, et toutes les mutations sont auditées.

ADMIN-003 — Modération

Créer un rapport, un avertissement et un bannissement ; retirer avertissement et ban ; tenter chaque action sans sa permission et reconnecter le compte banni.

Attendu : l'historique est conservé, le banni est refusé/déconnecté, les retraits sont tracés et aucune mutation non autorisée n'aboutit.

ADMIN-004 — Journaux admin et système

  1. Produire deux actions avec deux administrateurs.
  2. Filtrer l'audit par nom/ID Discord puis par nom d'action.
  3. Filtrer les logs système par application et texte avec différentes casses.

Attendu : les pages sont séparées, les filtres retournent uniquement les lignes attendues avant application de la limite, et les permissions de lecture restent indépendantes.

ADMIN-005 — Bot Discord

Exécuter les commandes de statut/liste puis ajouter et retirer un rôle avec un compte autorisé et un compte non autorisé.

Attendu : les lectures répondent, les mutations respectent ADMIN_MANAGE_ROLES, le rang cible et la hiérarchie du bot ; les erreurs Discord sont explicites.

ADMIN-006 — Gestion des MLO et redémarrage FiveM

Filtrer un MLO par une sous-chaîne sans tenir compte de la casse, modifier sa note, le désactiver et le réactiver, puis demander un redémarrage complet et répéter immédiatement la demande.

Attendu : l'état réel suit l'interface, la note persiste, start/stop ne produisent aucun « Access denied », le conteneur FiveM est recréé et les demandes concurrentes sont dédupliquées.

ADMIN-007 — Lisibilité du header en jeu

Ouvrir F10 en 1920×1080 puis en 1280×720, sélectionner chaque section et vérifier en particulier le titre MODÉRATION.

Attendu : le titre n'est ni coupé verticalement ni masqué par la télémétrie, et l'augmentation du header ne provoque aucun chevauchement avec les rails ou le workspace.

ARPhone

Exécuter ARP-013 à ARP-016 du plan ARPhone en web et F10, et vérifier que les audits n'incluent ni contenu, token, ni identifiant technique brut.

ADMIN-008 — Véhicules, clés et serruriers

Avec Founder puis des rôles ne possédant qu'une permission véhicule chacun, vérifier lecture, enregistrement F10, modification, gestion des clés, suppression définitive et placement serrurier. Répéter une mutation web sans CSRF et une mutation F10 avec une entité ou un bucket falsifié. Après l'enregistrement, cliquer sur Actualiser et vérifier que le véhicule apparaît. Valider un placement serrurier avec E : F10 doit rester fermé, le message de succès doit arriver après la sauvegarde et le Ped doit seulement apparaître après cette confirmation. Provoquer aussi un refus API et vérifier le message d'erreur sans Ped persistant.

Attendu : chaque permission est indépendante, Founder possède tout, les requêtes forgées sont refusées, les routes véhicules envoient actor_role_ids, et toutes les mutations réussies apparaissent dans l'audit avec l'acteur et la cible.

ADMIN-009 — Navigation horizontale des sous-sections F10

Ouvrir F10 en 1280×720, 1920×1080 et en ultralarge avec Founder, puis avec un rôle partiel. Dans Administration et World Edit, parcourir le rail secondaire avec les flèches visibles, la molette, un trackpad ou geste tactile, Tab puis Gauche/Droite et Début/Fin. Sélectionner le premier, un onglet central puis le dernier ; redimensionner la fenêtre et répéter avec mouvement réduit.

Attendu : tous les onglets autorisés sont atteignables sans être coupés, l’onglet actif revient dans la zone visible, les flèches se désactivent aux extrémités et le focus reste lisible. Les onglets refusés par permission restent absents et ne créent aucun espace vide navigable.

ADMIN-010 — Actions spatiales et restauration des véhicules

Avec Founder puis des rôles contenant séparément ADMIN_ALLOW_VIEW_VEHICLES, ADMIN_ALLOW_TPC et ADMIN_ALLOW_EDIT_VEHICLE, tester GPS, SE TP et les deux destinations de restauration. Falsifier l'UUID et le mode depuis la NUI, changer de bucket et placer un joueur dans le véhicule ciblé.

Attendu : les permissions sont recomposées côté serveur ; TP exige VIEW et TPC, restore exige EDIT, l'occupant n'est jamais déplacé, les erreurs sont françaises et chaque succès est audité avec l'acteur, la cible et les coordonnées serveur.

ADMIN-011 — Propriétaires des véhicules dans l'administration web

Avec ADMIN_ALLOW_EDIT_VEHICLE, rechercher des personnages et groupes depuis la modale de transfert, sélectionner un propriétaire puis un destinataire de clé distinct. Rejouer avec la seule permission de lecture et en forgeant directement l'appel de suggestions.

Attendu : les fiches et recherches utilisent les noms RP/groupes sans UUID visible ; la route de suggestions et le transfert refusent l'accès sans permission d'édition. La modale reste utilisable au clavier et sur écran étroit, et aucune mutation ne survient après annulation ou cible inexistante.

ADMIN-012 — Bootstrap véhicules, blips et TP garages F10

  1. Exécuter npm --prefix fivem test, démarrer medusa-vehicles avant medusa-admin, puis redémarrer deux fois la ressource véhicules.
  2. Créer/déplacer un serrurier, enregistrer un véhicule proche et vérifier les blips des neuf garages sur deux clients.
  3. Avec Founder, cliquer SE TP sur un garage. Rejouer avec les permissions ADMIN_ALLOW_VIEW_GARAGES et ADMIN_ALLOW_TPC séparées, un UUID falsifié et un autre bucket.

Attendu : tous les Lua Medusa sont syntaxiquement valides ; aucun export/callback n'est absent ; serrurier et blips se resynchronisent sans doublon ; le bouton TP exige les deux permissions, ignore toute coordonnée NUI, rejoint la position API et écrit un seul audit après confirmation réussie.

ADMIN-013 — Éditeur de garages et destinataires F10

  1. Ouvrir Administration > Garages avec Founder, puis avec vue seule et édition seule.
  2. Déplacer le rond, ajouter une sortie, déplacer/activer/désactiver/supprimer une sortie ; annuler puis confirmer le placement et comparer les UUID/révisions avant et après.
  3. Depuis Véhicules, enregistrer, transférer et réinitialiser les clés en recherchant un joueur connecté, un personnage hors ligne et un groupe ; forger ensuite les UUID transmis.
  4. Déclencher une plaque dupliquée, une révision obsolète, une sortie réservée et une permission refusée pendant que F10 reste ouvert.

Attendu : la section Garages est autonome ; chaque mutation vise seulement le rond ou l'UUID de sortie demandé ; les connectés sont en tête avec leur ID serveur, les groupes sont séparés et aucun UUID n'est affiché. Chaque résultat ou erreur est visible en français dans F10 et reste aussi tracé dans F8/F9.

ADMIN-014 — Handling et compartiments véhicule

  1. Créer dix rôles, chacun avec un seul des six droits handling ou quatre droits compartiments, puis rejouer catalogue, preview, affectation, édition, suppression, historique, résumé, détail, mutation et capacité dans F10 et sur le web.
  2. Pendant que le panneau est ouvert, retirer le droit puis forger directement chaque callback NUI.
  3. Cibler un véhicule enregistré actif, stocké, indisponible et un PNJ proche ; comparer résumé et détail, puis déplacer/déspawner le PNJ avant confirmation.
  4. Transférer tout le contenu, rejouer le même request_id, tenter une destination trop petite et détruire avec mauvaise plaque, bonne plaque sans seconde confirmation, puis confirmation complète.
  5. Inspecter les audits, notifications propriétaire personnage/groupe et logs ; rechercher UUID, boot_token, contenu privé, token de siège et clé interne.
  6. Exécuter l'administration web à 360, 768, 1280 et 1920 px, puis exporter un profil JSON.

Attendu : chaque droit est isolé et revalidé serveur ; un rôle vide reçoit 403 ; les résumés ne révèlent aucun objet ; une cible PNJ disparue est refusée ; toute mutation est atomique et idempotente ; les erreurs restent visibles et corrélées. Le web n'expose aucune action spatiale et le joueur ne reçoit aucune donnée de handling.

ADMIN-015 — Lisibilité des sources handling F10/web

  1. Charger dans les fixtures une source realistic, une custom, une gta_runtime et les états valid, runtime, missing, invalid, ambiguous.
  2. Dans F10 puis dans le web, vérifier Profils disponibles, Profils appliqués et Base ORIGINAL des véhicules. Ouvrir et refermer Détails techniques au clavier et à la souris.
  3. Rechercher avec un modèle, une famille française, GTA / FiveM, Détectée en jeu, puis avec un chemin, une empreinte et le texte d'un diagnostic. Rejouer à 360, 768, 1280 et 1920 px.

Attendu : les deux administrations utilisent le même vocabulaire ; la vue principale ne montre ni chemin ni empreinte, mais les détails complets restent accessibles, sélectionnables et copiables. Une source absente, invalide ou ambiguë affiche immédiatement sa cause. Chaque recherche retrouve la bonne carte sans rendre un UUID, et aucun contenu ne déborde aux quatre largeurs.

ADMIN-016 — Recherche F10 et véhicules d'un personnage

  1. Préparer des véhicules personnels et de groupe avec plaques contenant espaces/tirets, propriétaires homonymes, noms accentués et un personnage hors ligne possédant plusieurs véhicules.
  2. Dans Administration > Véhicules, rechercher successivement plaque compacte, plaque formatée, prénom, nom, nom complet et groupe, avec plusieurs casses. Effacer le filtre et observer le compteur résultats/total.
  3. Ouvrir chaque fiche Administration > Personnages et contrôler Véhicules (N). Exécuter les actions autorisées depuis cette vue, transférer puis supprimer un véhicule et actualiser.
  4. Rejouer avec ADMIN_ALLOW_VIEW_VEHICLES seul, sans cette permission, puis retirer un droit d'édition pendant que F10 reste ouvert. Tester clavier et 1280×720, 1920×1080, 2560×1440.

Attendu : la frappe filtre localement sans requête réseau ; aucun UUID ou modèle ne produit de résultat caché. La fiche montre uniquement les véhicules personnels de l'ID exact et jamais ceux de ses groupes. Les deux vues ont les mêmes cartes/actions, le serveur refuse toute mutation sans droit, les réponses successives ne laissent aucune carte fantôme et aucun backdrop opaque n'apparaît.

Permissions énergie

Tester séparément lecture, stations, prix, catalogue, correction, audit et TPC sur API, web et F10. Vérifier les trois propulsions, six produits, quatre catégories de station, quatre états de scan, prix au litre/point, anomalies, erreurs corrélées et absence de mutation sur les archives. Rejouer sans permission puis avec un client falsifié : le serveur doit refuser même si le bouton a été recréé. Les groupes restent nommés sans champ UUID. Playwright couvre 360/768/1280/1920 px. Voir Tests du système énergie.

Coordonnées F10 partagées — MED-20260905-001 R2

Exécuter fivem/tests/energy-native-coordinates.test.mjs avec la VM Lua 5.4 documentée dans la recette énergie. Les callbacks de production GPS/TP doivent conserver la destination exacte pour 265, -2733, 58, zéro et les fractionnaires, mais transmettre des flottants Lua aux natives. Un payload manquant, invalide, non fini ou hors contrat est refusé avant fade/gel et conserve l'accusé négatif existant. Le TP waypoint basé sur un vector3 natif reste inchangé.

En jeu, couvrir station, véhicule et garage ; revalider leurs droits lecture et ADMIN_ALLOW_TPC, le refus sans droit, et l'audit après confirmation positive seulement. Les coordonnées ne sont jamais prises d'une NUI comme preuve d'autorisation. La restauration d'une nouvelle station lc-road-XX reprend son centre canonique sans créer de point/prop ; conserver motif et auteur.