From c17dba3eb099e7b97a1e6c4961b92c4e28b96791 Mon Sep 17 00:00:00 2001 From: Sean Gordon Date: Fri, 1 Feb 2013 05:16:45 +0000 Subject: [PATCH] Made permissions inheritance work properly and cleanly --- pkg/base/main_server.lua | 46 +++++++++++++++++----------------------- svsave/pub/server.json | 6 +++--- 2 files changed, 22 insertions(+), 30 deletions(-) diff --git a/pkg/base/main_server.lua b/pkg/base/main_server.lua index 0780e41..02fcd2b 100644 --- a/pkg/base/main_server.lua +++ b/pkg/base/main_server.lua @@ -513,43 +513,22 @@ permissions = {} if server_config.permissions ~= nil then print "Permissions:" - -- For some reason, this gives them in reverse order, so extends doesn't work properly atm - -- GOGO HORRIBLE WORKAROUND - local temp_table_of_horror = {} - local temp_int_of_horror = 1 - for k,v in pairs(server_config.permissions) do - temp_table_of_horror[temp_int_of_horror] = {k,v} - temp_int_of_horror = temp_int_of_horror + 1 - end - local size_of_horror = table.getn(temp_table_of_horror) - for temp_int_of_horror = 1, size_of_horror/2, 1 do - local temp_thing_of_horror = temp_table_of_horror[temp_int_of_horror] - temp_table_of_horror[temp_int_of_horror] = temp_table_of_horror[size_of_horror - (temp_int_of_horror - 1)] - temp_table_of_horror[size_of_horror - (temp_int_of_horror - 1)] = temp_thing_of_horror - end - -- OHGODWHATHAVEIDONE - for horror_one, horror_two in pairs(temp_table_of_horror) do - local group = horror_two[1] - local perms = horror_two[2] + for group, perms in pairs(server_config.permissions) do print(" Group: "..group) permissions[group] = {} + permissions[group]["perms"] = {} if perms.password ~= nil then permissions[group]["password"] = perms.password else permissions[group]["password"] = "" end - print(" Password: "..permissions[group]["password"]) if perms.extends ~= nil then - if permissions[perms.extends] ~= nil then - print(" Extends: "..perms.extends) - permissions[group]["perms"] = copy_table(permissions[perms.extends]) - else - print(" Extends: "..perms.extends.." (doesn't exist)") - permissions[group]["perms"] = {} - end + permissions[group]["extends"] = perms.extends else - permissions[group]["perms"] = {} + permissions[group]["extends"] = "" end + print(" Password: "..permissions[group]["password"]) + print(" Extends: "..permissions[group]["extends"]) if perms.permissions ~= nil then print(" Permissions:") for k, v in pairs(perms.permissions) do @@ -558,6 +537,19 @@ if server_config.permissions ~= nil then end end end + -- Do inheritance + -- We do it this way to avoid costly lookups later, and possible infinite loops from looping inheritance + for group, perms in pairs(permissions) do + if perms["extends"] ~= "" then + if permissions[perms["extends"]] ~= nil then + for k,v in pairs(permissions[perms["extends"]]) do + perms["perms"][k] = v + end + else + print("Error: Group \""..group.."\" extends nonexistent group \""..perms["extends"].."\"") + end + end + end end -- load map diff --git a/svsave/pub/server.json b/svsave/pub/server.json index a39a885..84796e6 100644 --- a/svsave/pub/server.json +++ b/svsave/pub/server.json @@ -10,14 +10,14 @@ ] }, "rakiru" : { - "password" : "change me (don't use spaces)", + "password" : "123456", "extends" : "default", "permissions" : [ "god" ] }, "moderator" : { - "password" : "change me (don't use spaces)", + "password" : "iceball", "extends" : "default", "permissions" : [ "god", @@ -28,7 +28,7 @@ ] }, "admin" : { - "password" : "change me (don't use spaces)", + "password" : "Password1", "extends" : "moderator", "permissions" : [ "ban"