From a6be73a83e63266651aa97d9b609ea94ad259f3d Mon Sep 17 00:00:00 2001 From: Khaled <39503700+iiKhaled@users.noreply.github.com> Date: Tue, 26 May 2020 22:22:43 +0300 Subject: [PATCH 1/5] Added back give admin button & a few minor fixes --- [admin]/admin2/client/main/admin_players.lua | 16 +++++++------- [admin]/admin2/server/admin_functions.lua | 10 ++++----- [admin]/admin2/server/admin_sync.lua | 22 +++++++++++++------- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/[admin]/admin2/client/main/admin_players.lua b/[admin]/admin2/client/main/admin_players.lua index 66c99982c..2d551e924 100644 --- a/[admin]/admin2/client/main/admin_players.lua +++ b/[admin]/admin2/client/main/admin_players.lua @@ -257,13 +257,14 @@ function aPlayersTab.onClientClick(button) elseif (source == aPlayersTab.WarpPlayer) then aPlayerWarp(player) elseif (source == aPlayersTab.Admin) then - if - (aPlayers[player]["admin"] and - messageBox("Revoke admin rights from " .. name .. "?", MB_WARNING)) - then - triggerServerEvent("aPlayer", getLocalPlayer(), player, "setgroup", false) - elseif (messageBox("Give admin rights to " .. name .. "?", MB_WARNING)) then - triggerServerEvent("aPlayer", getLocalPlayer(), player, "setgroup", true) + if (aPlayers[player]["admin"]) then + if (messageBox("Revoke admin rights from " .. name .. "?", MB_WARNING, MB_YESNO)) then + triggerServerEvent("aPlayer", getLocalPlayer(), player, "setgroup", false) + end + else + if (messageBox("Give admin rights to " .. name .. "?", MB_WARNING, MB_YESNO)) then + triggerServerEvent("aPlayer", getLocalPlayer(), player, "setgroup", true) + end end end end @@ -465,6 +466,7 @@ function aPlayersTab.onRefresh() guiSetText(aPlayersTab.Name, "Name: " .. stripColorCodes(getPlayerName(player))) guiSetText(aPlayersTab.Mute, iif(aPlayers[player].mute, "Unmute", "Mute")) guiSetText(aPlayersTab.Freeze, iif(aPlayers[player].freeze, "Unfreeze", "Freeze")) + guiSetText(aPlayersTab.Admin, iif(aPlayers[player].admin, "Revoke admin", "Give admin")) if (isPedDead(player)) then guiSetText(aPlayersTab.Health, "Health: Dead") diff --git a/[admin]/admin2/server/admin_functions.lua b/[admin]/admin2/server/admin_functions.lua index cfd04bbf0..1f773c3bc 100644 --- a/[admin]/admin2/server/admin_functions.lua +++ b/[admin]/admin2/server/admin_functions.lua @@ -167,7 +167,7 @@ aFunctions = { ["jetpack"] = function(player) if (doesPedHaveJetPack(player)) then removePedJetPack(player) - return true, "jetpackr" + return "jetpackr" else if (getPedOccupiedVehicle(player)) then outputChatBox( @@ -179,7 +179,7 @@ aFunctions = { ) else if (givePedJetPack(player)) then - return true, "jetpacka" + return "jetpacka" end end end @@ -188,15 +188,15 @@ aFunctions = { -- NEEDS CHECKING local account = getPlayerAccount(player) if (not isGuestAccount(account)) then - local group = aclGetGroup(data) + local group = aclGetGroup("Admin") if (group) then if (data == true) then aclGroupAddObject(group, "user." .. getAccountName(account)) - return true, "admina" + return "admina" elseif (data == false) then aclGroupRemoveObject(group, "user." .. getAccountName(account)) aPlayers[player]["chat"] = false - return true, "adminr" + return "adminr" end for id, p in ipairs(getElementsByType("player")) do if (hasObjectPermissionTo(p, "general.adminpanel")) then diff --git a/[admin]/admin2/server/admin_sync.lua b/[admin]/admin2/server/admin_sync.lua index 0ad9c186e..8647c2540 100644 --- a/[admin]/admin2/server/admin_sync.lua +++ b/[admin]/admin2/server/admin_sync.lua @@ -1,11 +1,11 @@ ---[[********************************** -* -* Multi Theft Auto - Admin Panel -* -* admin_sync.lua -* -* Original File by lil_Toady -* +--[[********************************** +* +* Multi Theft Auto - Admin Panel +* +* admin_sync.lua +* +* Original File by lil_Toady +* **************************************]] addEvent(EVENT_SYNC, true) addEventHandler( @@ -25,9 +25,15 @@ addEventHandler( tableOut["version"] = getPlayerVersion(data) local account = getPlayerAccount(data) tableOut["account"] = getAccountName(account) + tableOut["admin"] = false if (not isGuestAccount(account)) then local groups = aclGetAccountGroups(account) if (#groups > 0) then + for id, group in ipairs(groups) do + if (string.find(group, "Admin")) then + tableOut["admin"] = true + end + end tableOut["groups"] = table.concat(table.reverse(groups), ", ") end end From f8139af8366dbb90e272bba1fe6c25b2f5c08c92 Mon Sep 17 00:00:00 2001 From: N3xT <39503700+iiN3xT@users.noreply.github.com> Date: Tue, 26 May 2020 22:36:15 +0300 Subject: [PATCH 2/5] Comparing groups instead of string.find --- [admin]/admin2/server/admin_sync.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/[admin]/admin2/server/admin_sync.lua b/[admin]/admin2/server/admin_sync.lua index 8647c2540..e922b9179 100644 --- a/[admin]/admin2/server/admin_sync.lua +++ b/[admin]/admin2/server/admin_sync.lua @@ -30,7 +30,7 @@ addEventHandler( local groups = aclGetAccountGroups(account) if (#groups > 0) then for id, group in ipairs(groups) do - if (string.find(group, "Admin")) then + if (group == "Admin") then tableOut["admin"] = true end end From 4b21e42e8bcf7b2d9c4f9ac447787563754a1150 Mon Sep 17 00:00:00 2001 From: Khaled <39503700+iiKhaled@users.noreply.github.com> Date: Wed, 27 May 2020 21:07:37 +0300 Subject: [PATCH 3/5] --- [admin]/admin2/server/admin_ACL.lua | 35 ++++++++++++++----- [admin]/admin2/server/admin_functions.lua | 42 ++++++++++++++--------- [admin]/admin2/server/admin_sync.lua | 7 +--- 3 files changed, 53 insertions(+), 31 deletions(-) diff --git a/[admin]/admin2/server/admin_ACL.lua b/[admin]/admin2/server/admin_ACL.lua index 11f01a5c0..d68c78640 100644 --- a/[admin]/admin2/server/admin_ACL.lua +++ b/[admin]/admin2/server/admin_ACL.lua @@ -1,11 +1,11 @@ ---[[********************************** -* -* Multi Theft Auto - Admin Panel -* -* admin_acl.lua -* -* Original File by lil_Toady -* +--[[********************************** +* +* Multi Theft Auto - Admin Panel +* +* admin_acl.lua +* +* Original File by lil_Toady +* **************************************]] function aSetupACL() outputDebugString("Verifying ACL...") @@ -112,6 +112,25 @@ function aclGetAccountGroups(account, ignoreall) return res end +function aclGetAdminGroup() + for ig, group in ipairs(aclGroupList()) do + if (hasGroupPermissionTo(group, "function.shutdown")) then + return group + end + end + return false +end + +function hasGroupPermissionTo(group, action) + local acls = aclGroupListACL(group) + for ia, acl in ipairs(acls) do + if (aclGetRight(acl, action)) then + return true + end + end + return false +end + function getResourceSettings(resName, bCountOnly) local allowedAccess = {["*"] = true, ["#"] = true, ["@"] = true} local allowedTypes = {["boolean"] = true, ["number"] = true, ["string"] = true, ["table"] = true} diff --git a/[admin]/admin2/server/admin_functions.lua b/[admin]/admin2/server/admin_functions.lua index 1f773c3bc..3e97db75f 100644 --- a/[admin]/admin2/server/admin_functions.lua +++ b/[admin]/admin2/server/admin_functions.lua @@ -188,29 +188,37 @@ aFunctions = { -- NEEDS CHECKING local account = getPlayerAccount(player) if (not isGuestAccount(account)) then - local group = aclGetGroup("Admin") - if (group) then - if (data == true) then + if (data == true) then + local group = aclGetAdminGroup() + if (group) then aclGroupAddObject(group, "user." .. getAccountName(account)) return "admina" - elseif (data == false) then - aclGroupRemoveObject(group, "user." .. getAccountName(account)) + else + outputChatBox( + "Error - Admin group not initialized. Please reinstall admin resource.", + source, + 255, + 0, + 0 + ) + end + elseif (data == false) then + local groups = aclGetAccountGroups(account) + if (#groups > 0) then + for id, group in ipairs(groups) do + local group = aclGetGroup(group) + if (hasGroupPermissionTo(group, "general.adminpanel")) then + aclGroupRemoveObject(group, "user." .. getAccountName(account)) + end + end aPlayers[player]["chat"] = false return "adminr" end - for id, p in ipairs(getElementsByType("player")) do - if (hasObjectPermissionTo(p, "general.adminpanel")) then - triggerEvent("aSync", p, "admins") - end + end + for id, p in ipairs(getElementsByType("player")) do + if (hasObjectPermissionTo(p, "general.adminpanel")) then + triggerEvent("aSync", p, "admins") end - else - outputChatBox( - "Error - Admin group not initialized. Please reinstall admin resource.", - source, - 255, - 0, - 0 - ) end else outputChatBox("Error - Player is not logged in.", source, 255, 100, 100) diff --git a/[admin]/admin2/server/admin_sync.lua b/[admin]/admin2/server/admin_sync.lua index 8647c2540..484aefb24 100644 --- a/[admin]/admin2/server/admin_sync.lua +++ b/[admin]/admin2/server/admin_sync.lua @@ -25,15 +25,10 @@ addEventHandler( tableOut["version"] = getPlayerVersion(data) local account = getPlayerAccount(data) tableOut["account"] = getAccountName(account) - tableOut["admin"] = false + tableOut["admin"] = hasObjectPermissionTo(data, "general.adminpanel") if (not isGuestAccount(account)) then local groups = aclGetAccountGroups(account) if (#groups > 0) then - for id, group in ipairs(groups) do - if (string.find(group, "Admin")) then - tableOut["admin"] = true - end - end tableOut["groups"] = table.concat(table.reverse(groups), ", ") end end From ac7a176754f5a579c786082b251d7ff8c3cf04b6 Mon Sep 17 00:00:00 2001 From: Khaled <39503700+iiKhaled@users.noreply.github.com> Date: Wed, 27 May 2020 23:16:59 +0300 Subject: [PATCH 4/5] Replaced give admin with permissions button --- [admin]/admin2/client/main/admin_players.lua | 16 +-- .../client/widgets/admin_permissions.lua | 101 ++++++++++++++++++ [admin]/admin2/meta.xml | 1 + [admin]/admin2/server/admin_ACL.lua | 19 ---- [admin]/admin2/server/admin_functions.lua | 41 +++---- [admin]/admin2/server/admin_sync.lua | 4 +- 6 files changed, 118 insertions(+), 64 deletions(-) create mode 100644 [admin]/admin2/client/widgets/admin_permissions.lua diff --git a/[admin]/admin2/client/main/admin_players.lua b/[admin]/admin2/client/main/admin_players.lua index 2d551e924..7f3f28f4c 100644 --- a/[admin]/admin2/client/main/admin_players.lua +++ b/[admin]/admin2/client/main/admin_players.lua @@ -73,7 +73,7 @@ function aPlayersTab.Create(tab) aPlayersTab.Shout = guiCreateButton(0.74, 0.19, 0.12, 0.04, "Shout", true, tab, "shout") aPlayersTab.Spectate = guiCreateButton(0.87, 0.19, 0.12, 0.04, "Spectate", true, tab, "spectate") aPlayersTab.SetNick = guiCreateButton(0.74, 0.235, 0.12, 0.04, "Set nick", true, tab, "setnick") - aPlayersTab.Admin = guiCreateButton(0.87, 0.235, 0.12, 0.04, "Give admin", true, tab, "setgroup") + aPlayersTab.Permissions = guiCreateButton(0.87, 0.235, 0.12, 0.04, "Permissions", true, tab, "setgroup") aPlayersTab.SlapOptions = guiCreateComboBox(0.76, 0.28, 0.1, 0.04, "0", true, tab) local width, height = guiGetSize(aPlayersTab.SlapOptions, false) for i = 0, 200, 20 do @@ -256,16 +256,8 @@ function aPlayersTab.onClientClick(button) end elseif (source == aPlayersTab.WarpPlayer) then aPlayerWarp(player) - elseif (source == aPlayersTab.Admin) then - if (aPlayers[player]["admin"]) then - if (messageBox("Revoke admin rights from " .. name .. "?", MB_WARNING, MB_YESNO)) then - triggerServerEvent("aPlayer", getLocalPlayer(), player, "setgroup", false) - end - else - if (messageBox("Give admin rights to " .. name .. "?", MB_WARNING, MB_YESNO)) then - triggerServerEvent("aPlayer", getLocalPlayer(), player, "setgroup", true) - end - end + elseif (source == aPlayersTab.Permissions) then + aPermissions.Show() end end elseif (source == aPlayersTab.AnonAdmin) then @@ -285,7 +277,6 @@ function aPlayersTab.onClientClick(button) guiSetText(aPlayersTab.Groups, "Groups: N/A") guiSetText(aPlayersTab.Mute, "Mute") guiSetText(aPlayersTab.Freeze, "Freeze") - guiSetText(aPlayersTab.Admin, "Give admin") guiSetText(aPlayersTab.Health, "Health: 0%") guiSetText(aPlayersTab.Armour, "Armour: 0%") guiSetText(aPlayersTab.Skin, "Skin: N/A") @@ -466,7 +457,6 @@ function aPlayersTab.onRefresh() guiSetText(aPlayersTab.Name, "Name: " .. stripColorCodes(getPlayerName(player))) guiSetText(aPlayersTab.Mute, iif(aPlayers[player].mute, "Unmute", "Mute")) guiSetText(aPlayersTab.Freeze, iif(aPlayers[player].freeze, "Unfreeze", "Freeze")) - guiSetText(aPlayersTab.Admin, iif(aPlayers[player].admin, "Revoke admin", "Give admin")) if (isPedDead(player)) then guiSetText(aPlayersTab.Health, "Health: Dead") diff --git a/[admin]/admin2/client/widgets/admin_permissions.lua b/[admin]/admin2/client/widgets/admin_permissions.lua new file mode 100644 index 000000000..d8d93f4c9 --- /dev/null +++ b/[admin]/admin2/client/widgets/admin_permissions.lua @@ -0,0 +1,101 @@ +--[[********************************** +* +* Multi Theft Auto - Admin Panel +* +* client\widgets\admin_permissions.lua +* +* Original File by lil_Toady +* +**************************************]] +aPermissions = { + Form = nil +} + +addEvent(EVENT_ACL, true) + +function aPermissions.Show() + if (not aPermissions.Form) then + local x, y = guiGetScreenSize() + aPermissions.Form = guiCreateWindow(x / 2 - 150, y / 2 - 125, 300, 250, "Player Permissions Management", false) + aPermissions.Label = + guiCreateLabel(0.03, 0.09, 0.94, 0.07, "Select a group from the list to give or revoke", true, aPermissions.Form) + guiLabelSetHorizontalAlign(aPermissions.Label, "center") + guiLabelSetColor(aPermissions.Label, 255, 0, 0) + aPermissions.List = guiCreateGridList(0.03, 0.18, 0.50, 0.71, true, aPermissions.Form) + guiGridListAddColumn(aPermissions.List, "Groups", 0.85) + aPermissions.Update = guiCreateButton(0.03, 0.90, 0.50, 0.08, "Refresh", true, aPermissions.Form) + aPermissions.Give = guiCreateButton(0.55, 0.18, 0.42, 0.09, "Give Group", true, aPermissions.Form, "createteam") + aPermissions.Revoke = guiCreateButton(0.55, 0.28, 0.42, 0.09, "Revoke Group", true, aPermissions.Form, "destroyteam") + aPermissions.Hide = guiCreateButton(0.55, 0.88, 0.42, 0.09, "Close", true, aPermissions.Form) + + addEventHandler(EVENT_ACL, getLocalPlayer(), aPermissions.onSync) + addEventHandler("onClientGUIClick", aPermissions.Form, aPermissions.onClick) + --Register With Admin Form + aRegister("PlayerPermissions", aPermissions.Form, aPermissions.Show, aPermissions.Close) + end + aPermissions.Refresh() + guiSetVisible(aPermissions.Form, true) + guiBringToFront(aPermissions.Form) +end + +aPermissions.SyncFunctions = { + [ACL_GROUPS] = function(data) + guiGridListClear(aPermissions.List) + for id, group in ipairs(data) do + local row = guiGridListAddRow(aPermissions.List) + guiGridListSetItemText(aPermissions.List, row, 1, group, false, false) + end + end, +} + +function aPermissions.onSync(action, ...) + aPermissions.SyncFunctions[action](...) +end + +function aPermissions.Close(destroy) + guiSetInputEnabled(false) + if (destroy) then + if (aPermissions.Form) then + removeEventHandler("onClientGUIClick", aPermissions.Form, aPermissions.onClick) + destroyElement(aPermissions.Form) + aPermissions.Form = nil + end + else + guiSetVisible(aPermissions.Form, false) + end +end + +function aPermissions.onClick(button) + if (button == "left") then + if (source == aPermissions.Update) then + aPermissions.Refresh() + elseif (source == aPermissions.Give) then + if (guiGridListGetSelectedItem(aPermissions.List) == -1) then + messageBox("No group selected!", MB_WARNING) + else + local group = guiGridListGetItemText(aPermissions.List, guiGridListGetSelectedItem(aPermissions.List), 1) + if (messageBox('Are you sure to give "' .. group .. '"?', MB_QUESTION, MB_YESNO)) then + triggerServerEvent("aPlayer", getLocalPlayer(), getSelectedPlayer(), "setgroup", true, group) + end + end + elseif (source == aPermissions.Revoke) then + if (guiGridListGetSelectedItem(aPermissions.List) == -1) then + messageBox("No group selected!", MB_WARNING) + else + local group = guiGridListGetItemText(aPermissions.List, guiGridListGetSelectedItem(aPermissions.List), 1) + if (messageBox('Are you sure to revoke "' .. group .. '"?', MB_QUESTION, MB_YESNO)) then + triggerServerEvent("aPlayer", getLocalPlayer(), getSelectedPlayer(), "setgroup", false, group) + end + end + elseif (source == aPermissions.Hide) then + aPermissions.Close(false) + end + end +end + +function aPermissions.Refresh() + if (aPermissions.List) then + guiGridListClear(aPermissions.List) + triggerServerEvent(EVENT_ACL, getLocalPlayer(), ACL_GROUPS) + end +end diff --git a/[admin]/admin2/meta.xml b/[admin]/admin2/meta.xml index 89b4c42f2..89e3599a1 100644 --- a/[admin]/admin2/meta.xml +++ b/[admin]/admin2/meta.xml @@ -62,6 +62,7 @@