update handler for #6460

Do not grant all privs to the admin - changes game behavior #6460
0.4
shivajiva101 2017-10-13 12:40:52 +01:00 committed by GitHub
parent bce1d3c913
commit cc6691dcb3
1 changed files with 21 additions and 14 deletions

View File

@ -153,23 +153,30 @@ sauth.auth_handler = {
end
-- If not in authentication table, return nil
if not r then return nil end
local admin = (name == minetest.setting_get("name"))
local privs = {}
if singleplayer or admin then
-- If admin, grant all privs, if singleplayer
-- grant all privs with give_to_singleplayer
-- save privs to speed up caching
for priv, def in pairs(core.registered_privileges) do
if (singleplayer and def.give_to_singleplayer) or admin then
privs[priv] = true
end
end
else
privs = minetest.string_to_privs(r.privileges)
-- Figure out what privileges the player should have.
-- Take a copy of the privilege table
local privileges = {}
for priv, _ in pairs(core.auth_table[name].privileges) do
privileges[priv] = true
end
-- If singleplayer, give all privileges except those marked as give_to_singleplayer = false
if core.is_singleplayer() then
for priv, def in pairs(core.registered_privileges) do
if def.give_to_singleplayer then
privileges[priv] = true
end
end
-- For the admin, give everything
elseif name == core.settings:get("name") then
for priv, def in pairs(core.registered_privileges) do
if def.give_to_admin then
privileges[priv] = true
end
end
end
local record = {
password = r.password,
privileges = privs,
privileges = privileges,
last_login = tonumber(r.last_login)
}
if not auth_table[name] then auth_table[name] = record end