Add basic_privs privilege

This commit is contained in:
Perttu Ahola 2012-04-09 18:57:41 +03:00
parent 251c0c8508
commit b1f043d010
2 changed files with 23 additions and 2 deletions

@ -111,8 +111,13 @@ minetest.register_chatcommand("privs", {
minetest.register_chatcommand("grant", { minetest.register_chatcommand("grant", {
params = "<name> <privilege>|all", params = "<name> <privilege>|all",
description = "Give privilege to player", description = "Give privilege to player",
privs = {privs=true}, privs = {},
func = function(name, param) func = function(name, param)
if not minetest.check_player_privs(name, {privs=true}) and
not minetest.check_player_privs(name, {basic_privs=true}) then
minetest.chat_send_player(name, "Your privileges are insufficient.")
return
end
local grantname, grantprivstr = string.match(param, "([^ ]+) (.+)") local grantname, grantprivstr = string.match(param, "([^ ]+) (.+)")
if not grantname or not grantprivstr then if not grantname or not grantprivstr then
minetest.chat_send_player(name, "Invalid parameters (see /help grant)") minetest.chat_send_player(name, "Invalid parameters (see /help grant)")
@ -125,6 +130,10 @@ minetest.register_chatcommand("grant", {
local privs = minetest.get_player_privs(grantname) local privs = minetest.get_player_privs(grantname)
local privs_known = true local privs_known = true
for priv, _ in pairs(grantprivs) do for priv, _ in pairs(grantprivs) do
if priv ~= "interact" and priv ~= "shout" and not minetest.check_player_privs(name, {privs=true}) then
minetest.chat_send_player(name, "Your privileges are insufficient.")
return
end
if not minetest.registered_privileges[priv] then if not minetest.registered_privileges[priv] then
minetest.chat_send_player(name, "Unknown privilege: "..priv) minetest.chat_send_player(name, "Unknown privilege: "..priv)
privs_known = false privs_known = false
@ -144,8 +153,13 @@ minetest.register_chatcommand("grant", {
minetest.register_chatcommand("revoke", { minetest.register_chatcommand("revoke", {
params = "<name> <privilege>|all", params = "<name> <privilege>|all",
description = "Remove privilege from player", description = "Remove privilege from player",
privs = {privs=true}, privs = {},
func = function(name, param) func = function(name, param)
if not minetest.check_player_privs(name, {privs=true}) and
not minetest.check_player_privs(name, {basic_privs=true}) then
minetest.chat_send_player(name, "Your privileges are insufficient.")
return
end
local revokename, revokeprivstr = string.match(param, "([^ ]+) (.+)") local revokename, revokeprivstr = string.match(param, "([^ ]+) (.+)")
if not revokename or not revokeprivstr then if not revokename or not revokeprivstr then
minetest.chat_send_player(name, "Invalid parameters (see /help revoke)") minetest.chat_send_player(name, "Invalid parameters (see /help revoke)")
@ -153,6 +167,12 @@ minetest.register_chatcommand("revoke", {
end end
local revokeprivs = minetest.string_to_privs(revokeprivstr) local revokeprivs = minetest.string_to_privs(revokeprivstr)
local privs = minetest.get_player_privs(revokename) local privs = minetest.get_player_privs(revokename)
for priv, _ in pairs(revokeprivs) do
if priv ~= "interact" and priv ~= "shout" and not minetest.check_player_privs(name, {privs=true}) then
minetest.chat_send_player(name, "Your privileges are insufficient.")
return
end
end
if revokeprivstr == "all" then if revokeprivstr == "all" then
privs = {} privs = {}
else else

@ -30,6 +30,7 @@ minetest.register_privilege("teleport", "Can use /teleport command")
minetest.register_privilege("bring", "Can teleport other players") minetest.register_privilege("bring", "Can teleport other players")
minetest.register_privilege("settime", "Can use /time") minetest.register_privilege("settime", "Can use /time")
minetest.register_privilege("privs", "Can modify privileges") minetest.register_privilege("privs", "Can modify privileges")
minetest.register_privilege("basic_privs", "Can modify 'shout' and 'interact' privileges")
minetest.register_privilege("server", "Can do server maintenance stuff") minetest.register_privilege("server", "Can do server maintenance stuff")
minetest.register_privilege("shout", "Can speak in chat") minetest.register_privilege("shout", "Can speak in chat")
minetest.register_privilege("ban", "Can ban and unban players") minetest.register_privilege("ban", "Can ban and unban players")