Система прав (или пермишанов) выполняет простейшую функцию - сопоставить с определенным игроком ряд строковых ключей и проверять их наличие.

Фундаментальные понятия:

  1. Пермишан - Строковой ключ, например command.vanilla.time. Наличие или отсутствие пермишана у игрока дает или отнимает у него определенное право (на выполнение серверной команды time, в данном случае). Символ * в конце пермишана означает "любое продолжение". Так, пермишан * выдает сразу все пермишаны, command.* - права на все команды.
  2. Мета - Строковой ключ, ассоциированный со значением. Позволяет не просто выдать определенное право, но и задать некоторый параметр. Например, цвет ника в чате.
  3. Отрицательный пермишан - Строковой ключ, начинающийся с символа ^. Отменяет выдачу соответствующего пермишана.
  4. Группа - Набор пермишанов, определенных глобально или только для определенных миров. Для группы может быть указана родительская группа (только одна), в таком случае группа включит в себя все пермишаны родительской группы. Игрок также может находиться лишь в одной группе. При первом входе игрока на сервер ему назначается группа default
  5. Миксин - Пермишан, который сочетает в себе несколько других пермишанов и метаданных. В отличии от группы, эти пермишаны не разделяются по мирам и могут быть добавлены игрокам или группам в любом количестве.

Порядок проверки наличия пермишана у игрока

На каждом этапе, при нахождении отрицательного пермишана поиск прерывается с отрицательным результатом, при нахождении обычного пермишана - с положительным.

  1. Конфигурация текущего игрока -> конфигурация текущего мира
  2. Конфигурация текущего игрока -> глобальная конфигурация
  3. Конфигурация группы текущего игрока -> конфигурация текущего мира
  4. Конфигурация группы текущего игрока -> глобальная конфигурация
  5. Конфигурация родительской группы текущего игрока -> конфигурация текущего мира
  6. ...и так далее

Минксины

Миксин - это пермишан, который может включать в себя несколько других пермишанов (в т.ч. других миксинов) и метаданных. Миксин добавляется игроку как обычный пермишан. Название миксина всегда начинается с 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 - Сохраняет текущую конфигурацию пермишанов на диск.

Меты и пермишаны ядра

Меты

Пермишаны

Пермишаны на команды

Обычно пермишаны команд имеют такую структуру:

command.{группа}.{имя команды}

Например, command.vanilla.help, command.basic.home, command.technical.id. К какой группе относится та или иная команда можно посмотреть в выводе команды /help all. Если команда добавляется модом, чаще всего в качестве группы используется id этого мода. Некоторые команды проверяют дополнительные пермишаны для какого-либо дополнительного функционала.

Назад