Made permissions inheritance work properly and cleanly

This commit is contained in:
Sean Gordon 2013-02-01 05:16:45 +00:00
parent 2bf50a379a
commit c17dba3eb0
2 changed files with 22 additions and 30 deletions

View File

@ -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

View File

@ -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"