PermissionsEX
**PermissionsEX (PEX)** — плагин для Bukkit, который позволяет легко разграничивать полномочия игроков на сервере. Имеет встроенные дополнения Modifyworld, которое даёт возможность определять, что игроки могут или не могут изменять в игровом мире, а также ChatManager с помощью которого можно разделить чат на локальный и глобальный, раскрасить ники игроков и добавить к ним префиксы и суффиксы.

## Установка

kol kol kol

## Использование

Для распределения прав игрокам нужно отредактировать файл permissions.yml по адресу plugins/PermissionsEx. Это можно сделать с помощью любого текстового редактора, но для удобности рекомендуется использовать Online YAML Editor

Открыв его мы увидим:


groups: default: default: true permissions: — `*`

Значение этих строк следующее:

**groups:** — указывает, что ниже будут идти группы и их права.

**default:** — название группы, куда попадают все только что зашедшие на сервер игроки, если они не прописаны в других группах. Вы можете менять это название на какое захотите.

**default:** true — параметр, который задаёт группу, как группу по-умолчанию. То есть, все права этой группы будет иметь любой игрок, для которого не определены другие группы и/или исключения.

**permissions:** — все, что идёт ниже, это и есть сами "права" для группы, сюда нужно прописывать permissions от различных плагинов установленных на вашем сервере. Значение *null* означает, что у группы/игрока нет никаких прав.

**- modifyworld.*** — возможность "модифицировать" мир. Если Вы не намерены конкретно определять, что игроки могут или не могут изменять в игровом мире, то это право лучше оставить как есть, а если намерены, то смотрите в ~~Modifyworld~~ * (с версии 1.0 функция плагина modifyworld вшита в плагин PermissionsEx)*.

Рассмотрим как мы можем отредактировать данный файл:


groups: player: default: true permissions: — modifyworld.* Admins: default: false inheritance: — default permissions: — '*' users: BigBoss: group: — Admins options: rank: '1' permissions:

Здесь мы добавили новую группу **Admins**, а также права для отдельного игрока **BigBoss:**.

**default:** false — означает, что данная группа **не является** группой по-умолчанию.

**inheritance:** — параметр, с помощью которого можно установить наследственность прав определённой группы, в данном случае — это группа **default**. Это значит, что Вам не придётся еще раз прописывать права группы **default** для группы **Admins**.

Звездочка ('*') означает, что у группы/игрока есть абсолютно все права на все плагины, установленные на сервере.

**users:** — означает, что ниже идут права отдельных игроков.

**BigBoss:** — имя игрока для которого настраиваются отдельные права.

**group: Admins** — указывает на то, что игрок входит в группу **Admins**

**rank:** — ранг игрока.


Предположим, что группа **Admins** имеет право *permissions.manage*, данное право позволяет получить полный доступ ко всем командам **PermissionsEx.** Если Вы захотели ограничить группу в определенном праве (*например permissions.manage.users)*, то перед правом нужно ставить две черты:

groups: Admins: default: false inheritance: — default permissions: — permissions.manage - -permissions.manage.users

Расположение (выше или ниже) запрещающего права (- -permissions.manage.users) по отношению к праву, дающему доступ ко всем командам **PermissionsEx** (permissions.manage) **не** имеет значения.

Если Вы хотите раскрасить ники игроков и добавить к ним префиксы и суффиксы то нужно включить и настроить в permissions.yml Chat Manager.

**Важно!** В YAML нужно чётко соблюдать последовательность, один лишний пробел — и параметр работать не будет. Поэтому для проверки permissions.yml рекомендуется использовать этот сайт. Там в левое окошко нужно вставить ваш код из permissions.yml, и если в правом окне не выдаст ошибок, то код написан правильно и он будет работать, если будут ошибки, то оно выдаст номер забракованной строки.

## Команды и права

С помощью следующих команд вы можете управлять PEX прямо через консоль или игровой чат, не редактируя файл permissions.yml

- Добавление префиксов и суффиксов будет работать только если включен Chat Manager или EssentialsChat (начиная с 1.6.4).
- Значение параметров: <такой> параметр обязателен для указания; [такой] параметр — опциональный.
- Параметр [world] позволяет локализировать действие команды в определенном мире.
- Там где упоминается единственное/множественное можно перечислять параметры через запятую.

### Служебные

Команда | Permission | Описание |
---|---|---|

/pex | permissions.manage | Показывает помощь по PEX. |

/pex toggle debug | permissions.manage | Вкл./откл. режим отладки (создает много отладочной информации в server.log) |

/pex user <user> check <permission> | permissions.manage.<user> | Проверить право <permission> игрока <user> |

/pex reload | permissions.manage.reload | Перезагружает плагин |

/pex config <node> [value] | permissions.manage.config | Выводит значение <node> из конфигурации PEX. Дополнительно можно ввести [value] чтобы задать новое значения для параметра. |

/pex backend | permissions.manage.backend | Вывести используемые на данный момент бэкенды. |

/pex backend <backend> | permissions.manage.backend | Измените базу данных разрешений «на лету» (используйте с осторожностью!) Обратите внимание, что это только изменяет базу данных «на лету», она не сохранит изменения в файле конфигурации и не преобразует ничего. Это только для тестирования. |

/pex hierarchy | permissions.manage.users | Показывает полную иерархию игроков/групп |

/pex dump <backend> <filename> | permissions.manage.dump | Создает дамп пользователей и групп в выбранный формат <backend> в файл <filename> |


### Управление правами игроков

Команда | Permission | Описание |
---|---|---|

/pex users | permissions.manage.users | Показывает список всех записанных пользователей. И игроков сервера |

/pex user <user> [world] | permissions.manage.users | Показывает права игрока <user> |

/pex user <user> prefix [newprefix] [world] | permissions.manage.users.prefix.<user> | Установить игроку <user> префикс [newprefix] |

/pex user <user> suffix [newsuffix] [world] | permissions.manage.users.suffix.<user> | Установить игроку <user> суффикс [newsuffix] |

/pex user <user> delete | permissions.manage.users.<user> | Удалить игрока <user> из бэкенда, используемого на данный момент. |

/pex user <user> add <permission> [world] | permissions.manage.users.permissions.<user> | Дать право <permission> игроку <user> |

/pex user <user> remove <permission> [world] | permissions.manage.users.permissions.<user> | Забрать право <permission> у игрока <user> |

/pex user <user> group add <permission> [world] [lifetime] | permissions.manage.users.permissions.timed.<user> | Дать временное право <permission> игроку <user> на время [lifetime] (в сек.) Выставите значение на "" (две двойные скобки) если вы хотите использовать право во всех мирах! |

/pex user <user> group remove <permission> | permissions.manage.users.permissions.timed.<user> | Забрать у игрока <user> временное право <permission> |

/pex user <user> set <option> <value> [world] | permissions.manage.users.permissions.<user> | Выставить опцию <option> на значение <value>. Выставите значение на "" (две двойные кавычки) если вы хотите убрать опцию <option> |


### Управление правами групп игроков

Команда | Permission | Описание |
---|---|---|

/pex user <user> group list [world] | permissions.manage.membership.<user> | Показать список групп в которых состоит игрок <user> |

/pex user <user> group add <group> | permissions.manage.membership.<user> | Добавить игрока <user> в группу <group> на время [lifetime]= |

/pex user <user> group set <group> [world] | permissions.manage.membership.<user> | Установить группу <group> для игрока <user> (удалит его из остальных групп) |

/pex user <user> group remove <group> [world] | permissions.manage.membership.<user> | Удалить игрока <user> из группы <group> |


### Управление правами групп

Команда | Permission | Описание |
---|---|---|

/pex groups | permissions.manage.groups.list | Показать все зарегистрированные группы |

/pex default group [world] | permissions.man-умолчанию | |

/pex set default group <group> [world] | permissions.manage.groups.inheritance | Установить группу <group> как группу по-умолчанию |

/pex group <group> prefix [newprefix] [world] | permissions.manage.groups.prefix.<group> | Установить группе <group> префикс [newprefix] |

/pex group <group> suffix [newsuffix] [world] | permissions.manage.groups.suffix.<group> | Установить группе <group> суффикс [newsuffix] |

/pex group <group> create [parents] | permissions.manageups.create.<group> | Создать группу <group> и если нужно установить для нее родительскую группу/группы [parents] |

/pex group <group> delete | permissions.manage.groups.remove.<group> | Удалить группу <group> |

/pex group <group> parents [world] | permissions.manage.groups.inheritance.<group> | Список родительских групп для группы <group> |

/pex group <group> parents set <parents> [world] | permissions.manage.groups.inheritance.<group> | Установить группе <group> родительскую группу/группы <parents> |

/pex group <group> | permissions.manage.groups.permissions.<group> | Показать все права группы <group> |

/pex group <group> add <permission> [world] | permissions.manage.groups.permissions.<group> | Дать право <permission> группе <group> |

/pex group <group> remove <permission> [world] | permissions.manage.groups.permissions.<group> | Забрать право <permission> у группы <group> |

/pex group <group> timed add <permission> [lifetime] [world] | permissions.manage.groups.permissions.timed.<group> | Дать временное право <permission> группе <group> на время [lifetime] (в сек.) |

/pex group <group> timed remove <permission> [world] | permissions.manage.groups.permissions.timed.<group> | Забрать временное право <permission> у группы <group> |

/pex group <group> set <option> <value> [world] | permissions.manage.groups.permissions.<group> | Выставить опцию <option> значение <value> для <group>. Выставите значение на "" (две двойные кавычки) если вы хотите убрать опцию <option> |

/pex group <group> weight [value] | permissions.manage.groups.weight.<group> | Показать/установить вес группы |


### Управление игроками в группах

Команда | Permission | Описание |
---|---|---|

/pex group <group> users | permissions.manage.membership.<group> | Показать всех игроков в группе <group> |

/pex group <group> user add <user> [world] [time] | permissions.manage.membership.<group> | Добавить игрока/игроков <user> в группу <group> на время [time] |

/pex group <group> user remove <user> [world] | permissions.manage.membership.<group> | Удалить игрока/игроков из группы <group> |

/pex promote <user> <ladder> | permissions.user.promote.<ladder> | Повысить игрока <user> в высшую группу <ladder> |

/pex demote <user> <ladder> | permissions.user.demote.<ladder> | Понизить игрока <user> в низшую группу <ladder> |


### Управление наследственностью миров

Команда | Permission | Описание |
---|---|---|

/pex worlds | permissions.manage.worlds | Показать загруженные миры |

/pex world <world> | permissions.manage.worlds | Показать информацию о наследственности мира <world> |

/pex world <world> inherit <parentWorlds> | permissions.manage.worlds.inheritance | Установить родительский мир/миры <parentWorlds> для мира <world> |


## Критика

API полномочий Bukkit’а (также называющееся “superperms”) был разработан с целью централизации конфигурации прав пользователей, отсутствия необходимости поиска плагинов, которые были бы совместимы с какой-то определенной системой прав. Все текущие плагины полностью поддерживают ‘superperms’, кроме PermissionsEx. PEX же работает против этой системы путем встраивания собственного кода. Это вызывало проблемы как у PEX, так и в самом Bukkit'е. Реализация "superperms" очень слабая, в некоторых случаях приводящая к серьезным сбоям. PEX пытается перенаправить все проверки привилегий через свою собственную систему, вместо работы с "superperms" Bukkit'а.

С версии 1.13 PEX поддерживает superperms

### Что не так?

- Неверная реализация дочерних привилегий. Может привести к тому, что у пользователей есть привилегии, которых им не давали напрямую.
- PEX приводит к проблемам в других плагинах.
[1] - Дэдлоки. Фриз сервера с комментарием ‘Read timed out’.
- Когда PEX вылетает, вместе с ним в небытие уходит множество других плагинов (в силу жесткого встраивания кода в Bukkit).
- Использование SQL приводит к падению производительности сервера. При удалении/добавлении привилегии происходит
**полная**перезапись всех привилегий пользователя на сервере.

### Что использовать вместо PEX?

- LuckPerms. Имеет возможность импорта настроек PEX, поддерживает множество серверных платформ, включая прокси-сервера (BungeeCord).
- bPermissions. Имеет возможность импорта настроек PEX.
- PermissionsBukkit.
- Privileges.

## Примечания

- ↑ Шаги к повтору — PermissionsEx is broken — Things PermissionsEx has broken — Breaks other plugins without error messages

## Ссылки

PermissionsEX на BukkitDev

PermissionsEX в викиeng

Критика PEX