Skip to content

Permissions

valk edited this page Oct 2, 2026 · 1 revision

permissions.yml decides who may do what, and bounds what players who aren't staff can make the server fetch.

Every action is a permission node of its own: actions.player.pause in the file is the node cdisc.player.pause. All nodes are registered at startup, so LuckPerms and similar plugins list them by name. Screens are built from these nodes, so a button a player may not press is not drawn for them.

Rules

A value in the file is one rule, or a list of rules where any one is enough:

Rule Lets in
true everyone
false nobody, until a permission plugin grants the node
op operators
notop everyone who is not an operator
somegroup.vip whoever has that permission
'!somegroup.muted' whoever has not got it. The quotes are required: a bare ! breaks the YAML
[somegroup.admin, somegroup.mod] whoever has either

true, false and op set the node's default, so a permission plugin can still overrule them for one player. A rule naming other permissions is a second way in: whoever matches it gets through, and so does anyone granted the node directly.

Nodes

Node Default Covers
cdisc.disc.create true /cdisc create
cdisc.disc.playlist true /cdisc disc playlist
cdisc.disc.clear true /cdisc disc clear
cdisc.disc.convert true /cdisc disc convert
cdisc.disc.download op /cdisc admin download
cdisc.disc.broadcast true /cdisc create broadcast:Name
cdisc.player.gui true Opening the player screen at all
cdisc.player.play, pause, next, previous true The buttons
cdisc.player.seek true Seek buttons, timecode, the dialog slider
cdisc.player.repeat, shuffle true
cdisc.player.volume true The jukebox volume everyone hears
cdisc.player.local-volume true Your own volume while carrying
cdisc.player.beacon true Beacon range levels
cdisc.player.portable true Picking a playing jukebox up
cdisc.player.channels true Channel and volume of a lone jukebox
cdisc.player.messages true Your track messages, /cdisc messages
cdisc.player.screen true Switching between chest screen and dialog
cdisc.player.info true /cdisc player info and status, /cdisc sneak
cdisc.queue.open, add, remove, play true The queue
cdisc.queue.policy true What happens to a played disc
cdisc.queue.crossfade true Crossfade on or off for a jukebox
cdisc.lyrics.toggle true /cdisc lyrics
cdisc.lyrics.preset true /cdisc preset
cdisc.lyrics.share true /cdisc preset share
cdisc.lyrics.scoreboard true Lyrics in the sidebar while carrying
cdisc.pair.create, manage, settings, dissolve, list true Speaker groups
cdisc.admin.reload op
cdisc.admin.doctor op
cdisc.admin.logs op /cdisc admin logs
cdisc.admin.local-files op /cdisc admin local-files-config
cdisc.admin.presets op /cdisc admin presets

Two nodes are not in the file:

  • cdisc.admin covers every node above except cdisc.admin.logs, ignores the limits below, and may change other players' speaker groups. Operators have it.
  • cdisc.admin.config opens the settings window, /cdisc admin config, and also gives everything cdisc.admin gives. cdisc.admin does not grant it. Operators only by default.

Uploading logs is granted only by cdisc.admin.logs itself or its rule, and log-upload: false in config.yml turns it off for everyone, console included.

Old node names

Nodes from before the per-action split still work:

Old node Grants
cdisc.create create, convert, broadcast
cdisc.create.playlist disc.playlist
cdisc.clear, cdisc.download, cdisc.doctor their one action
cdisc.player the whole player screen, the queue, lyrics.toggle, preset, scoreboard
cdisc.pair every speaker group action
cdisc.portable, cdisc.messages their one action
cdisc.preset lyrics.preset and share

Limits

Applied to everyone without cdisc.admin. /cdisc create makes the server fetch an address a player chose; without limits, one player can spend your bandwidth as fast as they type.

limits:
  create-cooldown-seconds: 5   # 0 turns the wait off
  max-track-seconds: 0         # 0 means no limit
  allow-live: true             # a stream has no length, so the line above can't bound it
  allowed-hosts: []            # filled in, ONLY these hosts pass
  blocked-hosts: []

A leading www. is ignored and subdomains count: youtube.com also covers music.youtube.com. Search queries aren't checked against the host lists, since they can't reach anywhere but their own source.

A strict example

limits:
  create-cooldown-seconds: 15
  max-track-seconds: 900
  allow-live: false
  allowed-hosts:
    - youtube.com
    - youtu.be
    - soundcloud.com

Worth locking first on a public server

  • Leave enabled.http in sources.yml off, or switch it on only together with allowed-hosts.
  • Keep a cooldown on /cdisc create.
  • Keep cdisc.disc.download for staff: it writes to disk.

Clone this wiki locally