1-- Minetest: builtin/privileges.lua
2
3--
4-- Privileges
5--
6
7core.registered_privileges = {}
8
9function core.register_privilege(name, param)
10	local function fill_defaults(def)
11		if def.give_to_singleplayer == nil then
12			def.give_to_singleplayer = true
13		end
14		if def.give_to_admin == nil then
15			def.give_to_admin = def.give_to_singleplayer
16		end
17		if def.description == nil then
18			def.description = "(no description)"
19		end
20	end
21	local def
22	if type(param) == "table" then
23		def = param
24	else
25		def = {description = param}
26	end
27	fill_defaults(def)
28	core.registered_privileges[name] = def
29end
30
31core.register_privilege("interact", "Can interact with things and modify the world")
32core.register_privilege("shout", "Can speak in chat")
33core.register_privilege("basic_privs", "Can modify 'shout' and 'interact' privileges")
34core.register_privilege("privs", "Can modify privileges")
35
36core.register_privilege("teleport", {
37	description = "Can teleport self",
38	give_to_singleplayer = false,
39})
40core.register_privilege("bring", {
41	description = "Can teleport other players",
42	give_to_singleplayer = false,
43})
44core.register_privilege("settime", {
45	description = "Can set the time of day using /time",
46	give_to_singleplayer = false,
47})
48core.register_privilege("server", {
49	description = "Can do server maintenance stuff",
50	give_to_singleplayer = false,
51	give_to_admin = true,
52})
53core.register_privilege("protection_bypass", {
54	description = "Can bypass node protection in the world",
55	give_to_singleplayer = false,
56})
57core.register_privilege("ban", {
58	description = "Can ban and unban players",
59	give_to_singleplayer = false,
60	give_to_admin = true,
61})
62core.register_privilege("kick", {
63	description = "Can kick players",
64	give_to_singleplayer = false,
65	give_to_admin = true,
66})
67core.register_privilege("give", {
68	description = "Can use /give and /giveme",
69	give_to_singleplayer = false,
70})
71core.register_privilege("password", {
72	description = "Can use /setpassword and /clearpassword",
73	give_to_singleplayer = false,
74	give_to_admin = true,
75})
76core.register_privilege("fly", {
77	description = "Can use fly mode",
78	give_to_singleplayer = false,
79})
80core.register_privilege("fast", {
81	description = "Can use fast mode",
82	give_to_singleplayer = false,
83})
84core.register_privilege("noclip", {
85	description = "Can fly through solid nodes using noclip mode",
86	give_to_singleplayer = false,
87})
88core.register_privilege("rollback", {
89	description = "Can use the rollback functionality",
90	give_to_singleplayer = false,
91})
92core.register_privilege("debug", {
93	description = "Allows enabling various debug options that may affect gameplay",
94	give_to_singleplayer = false,
95	give_to_admin = true,
96})
97
98core.register_can_bypass_userlimit(function(name, ip)
99	local privs = core.get_player_privs(name)
100	return privs["server"] or privs["ban"] or privs["privs"] or privs["password"]
101end)
102