Система прав (или пермишанов) выполняет простейшую функцию - сопоставить с определенным игроком ряд строковых ключей и проверять их наличие.
command.vanilla.time
. Наличие или отсутствие пермишана у игрока дает или отнимает у него определенное право (на выполнение серверной команды time, в данном случае). Символ *
в конце пермишана означает "любое продолжение". Так, пермишан *
выдает сразу все пермишаны, command.*
- права на все команды.^
. Отменяет выдачу соответствующего пермишана.default
На каждом этапе, при нахождении отрицательного пермишана поиск прерывается с отрицательным результатом, при нахождении обычного пермишана - с положительным.
Миксин - это пермишан, который может включать в себя несколько других пермишанов (в т.ч. других миксинов) и метаданных. Миксин добавляется игроку как обычный пермишан. Название миксина всегда начинается с mixin.; если не указать этот префикс явно, он будет добавлен автоматически при загрузке конфигурации. В отличии от групп, пермишаны в миксинах не разделяются по мирам и могут добавляться игрокам, группам и другим миксинам в любых количествах. Для разрешения конфликтов между несколькими миксинами, добавленными одному игроку/группе/миксину, каждый миксин имеет приоритет. По умолчанию приоритет каждого миксина равен нулю. Изменить его можно, задав мету "priority" (пример ниже).
Конфигурация разделена на 3 файла - groups.yml, mixins.yml и users.yml. Все они находятся в директории settings/permissions
.
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:
mixin.название.миксина:
meta:
priority: 10
мета_один: значение_меты
мета_два: значение_меты_два
permissions:
- первый.пермишан
- второй.пермишан
- ...
mixin.название.другого.миксина:
meta: {}
permissions: []
Добавив mixin.название.миксина как пермишан любому игроку или группе, данный игрок или группа получат все пермишаны и мету, входящие в данный миксин.
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 - Сохраняет текущую конфигурацию пермишанов на диск.
Обычно пермишаны команд имеют такую структуру:
command.{группа}.{имя команды}
Например, command.vanilla.help
, command.basic.home
, command.technical.id
. К какой группе относится та или иная команда можно посмотреть в выводе команды /help all
. Если команда добавляется модом, чаще всего в качестве группы используется id этого мода. Некоторые команды проверяют дополнительные пермишаны для какого-либо дополнительного функционала.