diff --git a/lua/bladw_announcement/server/sv_privileges.lua b/lua/bladw_announcement/server/sv_privileges.lua new file mode 100644 index 0000000..44c8b3d --- /dev/null +++ b/lua/bladw_announcement/server/sv_privileges.lua @@ -0,0 +1,54 @@ +BladW = BladW or {} +BladW.Announcement = BladW.Announcement or {} + +-- le droit géré par l'admin mod (SAM / ULX / FAdmin) +local PRIV = "bladw_announce" +BladW.Announcement.Privilege = PRIV + +-- j'enregistre le droit dans l'admin mod présent, pour qu'il apparaisse dans son menu +local function Register() + -- SAM + if sam and sam.permissions and sam.permissions.add then + pcall(sam.permissions.add, PRIV, "BladW Annonce", "admin") + end + + -- ULX / ULib + if ULib and ULib.ucl and ULib.ucl.registerAccess then + pcall(ULib.ucl.registerAccess, PRIV, "admin", "Gérer les annonces BladW", "BladW") + end + + -- FAdmin (DarkRP) : 2 = admin + if FAdmin and FAdmin.Access and FAdmin.Access.AddPrivilege then + pcall(FAdmin.Access.AddPrivilege, PRIV, 2) + end +end + +-- SAM veut qu'on (ré)enregistre ses permissions sur ce hook +hook.Add("SAM.LoadPermissions", "BladW:AnnouncePriv", Register) +-- les autres mods sont parfois chargés après le serveur -> on retente +hook.Add("InitPostEntity", "BladW:AnnouncePriv", Register) +-- et un coup direct au cas où le mod est déjà là (hot-reload) +Register() + +-- est-ce que ce joueur a le droit de gérer les annonces ? +function BladW.Announcement.HasAccess(ply) + if not IsValid(ply) then return false end + + -- SAM + if sam and sam.player and sam.player.has_permission then + return sam.player.has_permission(ply, PRIV) + end + + -- ULX / ULib + if ULib and ULib.ucl and ULib.ucl.query then + return ULib.ucl.query(ply, PRIV) + end + + -- FAdmin (DarkRP) + if FAdmin and FAdmin.Access and FAdmin.Access.PlayerHasPrivilege then + return FAdmin.Access.PlayerHasPrivilege(ply, PRIV) + end + + -- pas d'admin mod -> on retombe sur l'admin de base + return ply:IsAdmin() +end