3.2 KiB
title | layout | root |
---|---|---|
Privileges | default | ../../ |
Introduction
Privileges allow server owners to grant or revoke the right to do certain actions.
- When should a priv be used?
- Checking for privileges
- Getting and Setting
When should a priv be used?
A privilege should give a player the right to do something. They are not for indicating class or status.
The main admin of a server (the name set by the name
setting) has all privileges
given to them.
Good:
- interact
- shout
- noclip
- fly
- kick
- ban
- vote
- worldedit
- area_admin - admin functions of one mod is ok
Bad:
- moderator
- admin
- elf
- dwarf
Declaring a privilege
{% highlight lua %} minetest.register_privilege("vote", { description = "Can vote on issues", give_to_singleplayer = true }) {% endhighlight %}
If give_to_singleplayer
is true, then you can remove it as that's the default
value when not specified:
{% highlight lua %} minetest.register_privilege("vote", { description = "Can vote on issues" }) {% endhighlight %}
Checking for privileges
There is a quicker way of checking that a player has all the required privileges:
{% highlight lua %} local has, missing = minetest.check_player_privs(player_or_name, { interact = true, vote = true }) {% endhighlight %}
has
is true if the player has all the privileges needed.\
If has
is false, then missing
will contain a dictionary
of missing privileges[checking needed].
{% highlight lua %} if minetest.check_player_privs(name, {interact=true, vote=true}) then print("Player has all privs!") else print("Player is missing some privs!") end
local has, missing = minetest.check_player_privs(name, { interact = true, vote = true }) if has then print("Player has all privs!") else print("Player is missing privs: " .. dump(missing)) end {% endhighlight %}
Getting and Setting
You can get a table containing a player's privileges using minetest.get_player_privs
:
{% highlight lua %} local privs = minetest.get_player_privs(name) print(dump(privs)) {% endhighlight %}
This works whether or not a player is logged in.\ Running that example may give the following:
{% highlight lua %} { fly = true, interact = true, shout = true } {% endhighlight %}
To set a player's privs, you use minetest.set_player_privs
:
{% highlight lua %} minetest.set_player_privs(name, { interact = true, shout = true }) {% endhighlight %}
To grant a player some privs, you would use a mixture of those two:
{% highlight lua %} local privs = minetest.get_player_privs(name) privs.vote = true minetest.set_player_privs(name, privs) {% endhighlight %}
Adding privileges to basic_privs
basic_privs
is a privilege that allows a player to only grant certain privileges.
It's common to give this privilege to moderators so they can grant and revoke
interact and shout, but can't give themselves or other players any bigger
privileges such as giveme and server.
To add a privilege to basic_privs, you need to change the basic_privs setting to include any privs you wish.
By default basic_privs has the following value:
basic_privs = interact, shout
And then you can add vote as so:
basic_privs = interact, shout, vote