Система прав (или пермишанов) выполняет простейшую функцию - сопоставить с определенным игроком ряд строковых ключей и проверять их наличие.
Фундаментальные понятия:
-
Пермишан - Строковой ключ, например
command.vanilla.time
. Наличие или отсутствие пермишана у игрока дает или отнимает у него определенное право (на выполнение серверной команды time, в данном случае). Символ*
в конце пермишана означает "любое продолжение". Так, пермишан*
выдает сразу все пермишаны,command.*
- права на все команды. - Мета - Строковой ключ, ассоциированный со значением. Позволяет не просто выдать определенное право, но и задать некоторый параметр. Например, цвет ника в чате.
-
Отрицательный пермишан - Строковой ключ, начинающийся с символа
^
. Отменяет выдачу соответствующего пермишана. -
Группа - Набор пермишанов, определенных глобально или только для определенных миров. Для группы может быть указана родительская группа (только одна), в таком случае группа включит в себя все пермишаны родительской группы. Игрок также может находиться лишь в одной группе. При первом входе игрока на сервер ему назначается группа
default
- Миксин - Пермишан, который сочетает в себе несколько других пермишанов и метаданных. В отличии от группы, эти пермишаны не разделяются по мирам и могут быть добавлены игрокам или группам в любом количестве.
Порядок проверки наличия пермишана у игрока
На каждом этапе, при нахождении отрицательного пермишана поиск прерывается с отрицательным результатом, при нахождении обычного пермишана - с положительным.
- Конфигурация текущего игрока -> конфигурация текущего мира
- Конфигурация текущего игрока -> глобальная конфигурация
- Конфигурация группы текущего игрока -> конфигурация текущего мира
- Конфигурация группы текущего игрока -> глобальная конфигурация
- Конфигурация родительской группы текущего игрока -> конфигурация текущего мира
- ...и так далее
Минксины
Миксин - это пермишан, который может включать в себя несколько других пермишанов (в т.ч. других миксинов) и метаданных. Миксин добавляется игроку как обычный пермишан. Название миксина всегда начинается с mixin.; если не указать этот префикс явно, он будет добавлен автоматически при загрузке конфигурации. В отличии от групп, пермишаны в миксинах не разделяются по мирам и могут добавляться игрокам, группам и другим миксинам в любых количествах. Для разрешения конфликтов между несколькими миксинами, добавленными одному игроку/группе/миксину, каждый миксин имеет приоритет. По умолчанию приоритет каждого миксина равен нулю. Изменить его можно, задав мету "priority" (пример ниже).
Конфигурация пермишанов через yml файлы
Конфигурация разделена на 3 файла - groups.yml, mixins.yml и users.yml. Все они находятся в директории settings/permissions
.
Структура файла groups.yml
groups:
название_группы:
inherits: 'название_родительской_группы'
global: # глобальная конфигурация (для всех миров)
meta:
мета_один: значение_меты
мета_два: значение_меты_два
permissions:
- первый.глобальный.пермишан
- второй.глобальный.пермишан
- ...
worlds:
Название_мира: #Перечисленные ниже пермишаны работают только для этого мира
meta:
мета_один: значение_меты_в_этом_мире
мета_два: значение_меты_два_в_этом_мире
permissions:
- первый.пермишан.этого.мира
- второй.пермишан.этого.мира
- ...
Название_другого_мира:
meta: {} #Без меты
permissions: [] #Без пермишанов
название_другой_группы:
...
Пример реальной конфигурации
groups:
default: #Группа по умолчанию для новых игроков. Без прав на изменение мира, но с некоторыми командами
inherits: ''
global:
meta:
color: f #Белый цвет ника
permissions:
- command.vanilla.help
- command.vanilla.msg
- command.vanilla.me
- command.vanilla.kill
- command.vanilla.list
- command.fastwarp.spawn
worlds: {}
admin: #Админская группа. Полные права
inherits: ''
global:
meta:
color: c #Красный цвет ника
prefix: '&4[Админ] ' #Ярко-красный префикс
tablistcolor: c #Красный цвет ника в tab-меню
permissions:
- '*'
worlds: {}
player: #Основная группа игроков. Выдается вручную
inherits: 'default' #Наследуем пермишаны группы default и получаем от нее права на некоторые базовые команды
global:
meta:
color: '7' #Серый цвет ника
permissions:
- ability.player.useblock
- ability.player.useitem
- ability.player.blockplace
- ability.player.blockbreak
- ability.player.attack
- ability.player.chat
- command.basic.home
- command.basic.sethome
- command.technical.id
- hawk.page
worlds:
world_spawn: #В мире спавна снимаем права на изменение территории, которые выданы для всех других миров
permissions:
- ^ability.player.useitem
- ^ability.player.blockplace
- ^ability.player.blockbreak
- ^ability.player.attack
Структура файла mixins.yml
mixins:
mixin.название.миксина:
meta:
priority: 10
мета_один: значение_меты
мета_два: значение_меты_два
permissions:
- первый.пермишан
- второй.пермишан
- ...
mixin.название.другого.миксина:
meta: {}
permissions: []
Добавив mixin.название.миксина как пермишан любому игроку или группе, данный игрок или группа получат все пермишаны и мету, входящие в данный миксин.
Структура файла users.yml
users:
ник_игрока:
inherits: 'название_группы' #группы, объявленной в файле groups.yml.
global: #Дальше в точности как в конфигурации групп
meta: {}
permissions: []
worlds:
название_мира:
meta: {}
permissions: []
ник_другого_игрока:
Команды для управления пермишанами
/puser [название_мира] <ник_игрока> <add|remove> <пермишаны...> - Добавить/удалить пермишаны игроку в указанном мире или глобально, если мир не указан.
/puser [название_мира] <ник_игрока> meta <ключ> <значение> - Установить мету игроку в указанном мире или глобально, если мир не указан.
/puser <ник_игрока> setgroup <группа> - Установить родительскую группу игроку.
/pgroup [название_мира] <группа> <add|remove> <пермишаны...> - Добавить/удалить пермишаны группе в указанном мире или глобально, если мир не указан.
/pgroup [название_мира] <группа> meta <ключ> <значение> - Установить мету группе в указанном мире или глобально, если мир не указан.
/pgroup <группа> setparent <группа> - Установить родительскую группу для данной группы.
/pmixin <миксин> <add|remove> <пермишаны...> - Добавить/удалить пермишаны миксину.
/pmixin <миксин> meta <ключ> <значение> - Установить мету миксину.
/pcfg reload - Перезагружает конфигурацию пермишанов с диска.
/pcfg save - Сохраняет текущую конфигурацию пермишанов на диск.
Меты и пермишаны ядра
Меты
- color - Цвет ника в чате. Цвет задается кодом, со всеми доступными цветами можно ознакомиться здесь.
- textcolor - Цвет сообщений в чате.
- prefix - Префикс, добавляется перед ником в чате. Можно использовать цвета (использовать символ & перед кодом цвета)
- postfix - Постфикс, добавляется после ника в чате.
- tablistcolor - Цвет в списке игроков по TAB
Пермишаны
- ability.player.useblock - Разрешает использование блоков (правый клик).
- ability.player.useitem - Разрешает использование предметов (правый клик).
- ability.player.blockplace - Разрешает установку блоков в мире (работает только с правом ability.player.useitem).
- ability.player.blockbreak - Разрешает разрушение блоков в мире.
- ability.player.attack - Разрешает наносить урон игрокам или мобам.
- ability.player.chat - Дает возможность писать в чат
- ability.admin.keepinventory - Отключает выпадение инвентаря
- ability.admin.hidejoinmessage - Скрывает сообщение входа данного игрока на сервер
- ability.admin.seeinvisibleplayers - Позволяет видеть игроков, находящихся в невидимости (/vanish)
- ability.admin.ignoreInterworldHome - Позволяет телепортироваться на /home, находящийся в другом мире, если это запрещено по умолчанию в настройках server.yml
- admin.abilities.skipteleportcooldown -
- admin.abilities.skipteleportdelay
- show.debuginfo - Показывать данному игроку автосообщения о нагрузке сервера (настраиваются в server.yml)
- minecraft.cmd_notify - Игрок с данным пермишаном будет получать нотификации при выполнении ванильных команд
- minecraft.allow_spam - Для игрока с данным пермишаном отключены проверки на спам в чате
Пермишаны на команды
Обычно пермишаны команд имеют такую структуру:
command.{группа}.{имя команды}
Например, command.vanilla.help
, command.basic.home
, command.technical.id
. К какой группе относится та или иная команда можно посмотреть в выводе команды /help all
. Если команда добавляется модом, чаще всего в качестве группы используется id этого мода. Некоторые команды проверяют дополнительные пермишаны для какого-либо дополнительного функционала.