Permissions
Grades staff persistés en base, avec héritage linéaire par niveau et commandes à permission vérifiée.
Grades staff persistés en base, avec héritage linéaire par niveau et commandes à permission vérifiée.
lib.permissions gère des grades staff stockés en base de données. Un grade est { name, level },
et l'héritage est linéaire par niveau — un joueur de niveau 100 a tous les droits des
niveaux inférieurs. Les grades sont définis dans la config de see_lib.
| Fonction | Retour | Description |
|---|---|---|
getGrade(source) | { name, level }? | Le grade du joueur, ou nil. |
hasLevel(source, level) | boolean | Si le joueur est au moins de niveau level. |
isStaff(source) | boolean | Si le joueur a un grade. |
setGrade(source, gradeName) | boolean | Attribue un grade (persisté). |
removeGrade(source) | boolean | Retire le grade du joueur. |
getGradeLevel(gradeName) | number? | Le niveau d'un grade, par nom. |
getGrade(source){ name, level }?nil.hasLevel(source, level)booleanlevel.isStaff(source)booleansetGrade(source, gradeName)booleanremoveGrade(source)booleangetGradeLevel(gradeName)number?if not lib.permissions.hasLevel(source, 50) then return end
lib.permissions.setGrade(source, 'moderator')registerCommand(name, requiredLevel, handler, allowConsole?) enveloppe RegisterCommand avec
une vérification de niveau automatique :
lib.permissions.registerCommand('revive', 50, function(source, args)
local targetId = tonumber(args[1])
if targetId then revivePlayer(targetId) end
end)Un joueur sous requiredLevel reçoit une notification d'erreur. La console serveur (source 0)
est bloquée sauf si tu passes allowConsole = true.
Côté client, lib.permissions expose un cache synchrone du grade du joueur local —
pour filtrer l'UI uniquement, jamais comme source de vérité.
getLevel() → number — niveau du grade local (0 si non-staff).hasLevel(level) → boolean — note : pas de source ici (joueur local implicite).isStaff() → boolean.Re-vérifie toujours côté serveur pour toute action sensible — le cache client est manipulable. L'héritage est par niveau, pas par scope nommé. Un grade doit exister dans la config, sinon setGrade échoue (renvoie false).