Permissions et URL
Les ACE pmms.* et command.pmms_*, ce qu’accorde le permissions.cfg livré, comment limiter les URL aux presets ou à Config.allowedUrls, et les points de vigilance relevés dans le code.
But : décider qui peut lancer quoi, et sur quelles entités.
Fichiers : pmms/permissions.cfg (chargé par exec @pmms/permissions.cfg) et Config.allowedUrls dans config.lua.
Les permissions
PMMS n’utilise que les ACE de FiveM ; aucun framework n’est consulté. Le serveur vérifie ces permissions à chaque action, et les envoie au client pour adapter le panneau.
| ACE | Accordée par le pack | Ressource d’origine | Effet |
|---|---|---|---|
pmms | group.admin | group.admin | Permission parente : accorde toutes les permissions pmms.* ci-dessous. |
pmms.interact | builtin.everyone | builtin.everyone | Utiliser un lecteur non verrouillé : lancer, mettre en pause, arrêter, régler volume, atténuation, portée, vidéo, boucle, file d’attente, copier. |
pmms.anyEntity | builtin.everyone | builtin.everyone | Utiliser toute entité dont le modèle est dans Config.models. Sans elle, seules les entités autorisées par l’export client enableEntity ou créées par createMediaPlayer sont utilisables. Les véhicules ne sont pas concernés. |
pmms.customUrl | builtin.everyone | commentée | Jouer une URL au lieu d’un preset, limitée à Config.allowedUrls sauf avec pmms.anyUrl. Sans elle : presets uniquement. |
pmms.anyUrl | builtin.everyone | commentée | Jouer n’importe quelle URL, sans passer par Config.allowedUrls (nécessite aussi pmms.customUrl). |
pmms.manage | group.admin | group.admin | Verrouiller et déverrouiller, contrôler les lecteurs verrouillés, enregistrer ou supprimer les réglages de modèles et d’entités, voir les lecteurs actifs au-delà de maxDiscoveryDistance. |
Un lecteur verrouillé (locked) ne peut être contrôlé que par un joueur qui a pmms.manage.
Après un changement d’ACE en cours de partie, lancez /pmms_refresh_perms pour que les clients rechargent leurs permissions.
Ce qu’accorde le pack livré
add_ace group.admin pmms allow
add_ace builtin.everyone pmms.interact allow
add_ace builtin.everyone pmms.anyEntity allow
add_ace builtin.everyone pmms.customUrl allow
add_ace builtin.everyone pmms.anyUrl allow
Avec ce fichier, tout joueur peut jouer n’importe quelle URL sur n’importe quel lecteur non verrouillé. La ressource d’origine laissait pmms.customUrl et pmms.anyUrl désactivées.
Limiter les URL
Presets uniquement : retirez les deux lignes customUrl et anyUrl. Les joueurs ne peuvent plus lancer que les entrées de Config.presets.
Sites autorisés : retirez seulement la ligne anyUrl. Les joueurs peuvent lancer les URL qui correspondent à un motif de Config.allowedUrls (YouTube, youtu.be et Twitch par défaut).
add_ace group.admin pmms allow
add_ace builtin.everyone pmms.interact allow
add_ace builtin.everyone pmms.anyEntity allow
add_ace builtin.everyone pmms.customUrl allow
Rôle intermédiaire : accordez pmms.anyUrl à un groupe précis, par exemple add_ace group.dj pmms.anyUrl allow (group.dj est un exemple de groupe).
Résultat attendu : un joueur sans pmms.anyUrl qui colle une URL hors liste reçoit « You do not have permission to play the specified URL ».
Permissions des commandes
Les commandes sont restreintes : chacune exige command.<nom>. Le fichier livré donne les commandes de base à builtin.everyone et pmms_ctl, pmms_add, pmms_refresh_perms à group.admin ; voir Commandes. Si vous changez Config.commandPrefix ou Config.commandSeparator, renommez ces lignes.
Points de vigilance relevés dans le code
Ces comportements viennent du code exécuté de cette archive ; ils existent aussi dans la ressource d’origine.
- Contrôle des URL : les règles d’URL, les presets et
Config.oneMediaPerPlayersont vérifiés quand le client demande une lecture. Le message réseau envoyé ensuite, une fois le média chargé, ne revérifie quepmms.interactet le verrouillage. Un client modifié peut donc contournerConfig.allowedUrls; ne comptez pas sur cette liste comme seule barrière sur un serveur exposé. - File d’attente : quand un lecteur joue déjà, la demande est ajoutée à sa file sans contrôle immédiat ; les contrôles complets ont lieu quand vient son tour.
- Option
-lock: un joueur qui lance un média peut le démarrer verrouillé sans avoirpmms.manage; il ne pourra plus le contrôler lui-même. - Véhicules : avec
Config.allowPlayingFromVehicles = true, tout véhicule proche est un lecteur, indépendamment deConfig.modelset depmms.anyEntity. - Exports : les exports serveur ne vérifient aucune permission et ne sont pas concernés par
Config.oneMediaPerPlayer. Les ressources qui les appellent doivent faire leurs propres contrôles.
Erreurs fréquentes
- Les administrateurs n’ont pas plus de droits :
group.adminn’est attribué à aucun joueur. Ajoutez par exempleadd_principal identifier.license:… group.admin. - Restriction sans effet : vous avez commenté
pmms.anyUrlmais un autre fichier exécuté l’accorde encore àbuiltin.everyone. - Changement d’ACE non pris en compte : lancez
/pmms_refresh_permsou reconnectez le joueur.