Bukkit Spigot Japan Wikiは、Hello Minecraftを応援しています。

超まいくらひろば2017バナー

 

 

プラグイン解説:PermissionsEx

提供: Bukkit Spigot Japan Wiki
移動: 案内検索
プラグイン名 PermissionsEx ※開発停止
製作者 zml2008 他
配布場所 BukkitDev
前提プラグイン なし
解説記事対応バージョン PermissionsEx-1.23.4&Spigot-1.9
生成されるファイル PermissionsEx(フォルダー) > config.yml,permissions.yml
ライセンス GNU General Public License version 2 (GPLv2)
ソースコード GitHub
関連サイト 公式Wiki(en),フォーラム
備考 短縮はPEXを使用します。

PermissionsExについて

PermissionsExは、プレーヤーの権限を管理するプラグインです。
権限管理プラグインの中で最も使われ、他プラグインとの連携も多くされています。
しかしながら、2017年12月24日にGitHubのREADME.mdにて開発中止と、以降はPermissionExの設定を引き継ぎ出来るLuckPermsを利用するよう宣言されました。

名称の説明

  • permissionとは権限という意味です。
    PermissionsEx等で使われる、permissions.ymlに書き込む文字列の事をpermission node(パーミッションノード)と呼びます。

PermissionsExの導入方法

サーバー構築を参考にサーバーを構築しておいて下さい。

  1. 配布ページからプラグインをダウンロードして下さい。
  2. jarファイルをサーバーのpluginsフォルダー内に配置します。
  3. サーバーを起動します。
  4. サーバーのコンソールに「pl」コマンドを実行させて一覧の中から、PermissionsExが緑色であればサーバーを停止します。
  5. pluginsフォルダー内にPermissionsExフォルダーが生成されたことを確認します。
  6. PermissionsExフォルダー内にconfig.ymlとpermissions.ymlが生成されていれば導入完了です。

チュートリアル

このファイルの記述を間違えるとプラグインは正常に動作せず、権限設定も有効になりません。
結果的に荒らし行為の標的となってしまう恐れがあります。
当Wikiや編集者は一切の責任を負いません。必ず自己責任で設定してください。

権限の設定方法

まず、権限を設定する方法は主に以下の2つがあります。
1.#コマンドでの権限設定
2.#permissions.ymlの設定変更(基礎)

1のコマンドで追加する人は一つ一つ追加する必要があるため、かなり大変です。
ですが、YAML形式の記述方法を知らなくても可能なため、その点において楽です。

2の編集をしていく方法は、YAML形式の書き方を知る必要があり、ミスをしてしまう事もあり、ミスをした時にエラーログを読む必要もあります。
ですが1に比べて多くの追加を一度に出来るため、その点においては楽ではあります。
プラグイン導入後に生成されるplugins/PermissionsEx内のpermission.ymlを書き変えることで、権限を設定できます。
またそのファイルは、他プラグインのようにYAML形式が使用されています。
ですので先にYAMLファイルを見ておくことを推薦します。

なお、どちらを選ぶのかは好みです。

コマンドでの権限設定

#コマンド一覧からやりたいことの中で適応するコマンドを、実行して下さい。
それにより自動でpermissions.ymlに変更が加えられます。

コマンド一覧

< >はコマンド入力に必須な引数を、[ ]はオプション(必須ではない)の引数を表します。
< - >: 前後の数字の範囲の中でいずれかを選択することを表しています。
< / >: 前後のどちらかを選択することを表しています。
true/false: 有効/無効にするかを選択するものです(true→有効,false→無効)。
string: 文字列、つまりテキスト、文章を書くことを表しています。
number: 数字を書くことを表しています。
(入力の際<>や[]は不要です)

コマンド パーミッションノード 説明
管理系コマンド
pex permissions.manage ヘルプを表示します。
pex toggle debug permissions.debug デバッグモードの有効/無効を切り替えます。(注意:有効にするとサーバーログが大きくなってしまうため、デバッグするときのみ有効化して下さい)
pex user <user> toggle debug permissions.debug.<user> 特定のユーザーデバッグモードの有効/無効を切り替えます。(注意:有効にするとサーバーログが大きくなってしいます。Best used immediately _before_ and _after_ a user executes an action or command.)
pex user <user> check <permission> permissions.manage.<user> 特定のユーザーに対する特定のパーミッションを調べます。
pex reload permissions.manage.reload PermissionsExの環境をリロード(再読み込み)します。
pex config <node> [value] permissions.manage.config config.ymlの項目の値を表示します。Specify [value] to set a new value
pex backend permissions.manage.backend Print the currently used backend
pex backend <backend> permissions.manage.backend Change the permissions backend on-the-fly (Use with caution!) Note that this will only change the backend on-the-fly, it will not save the change in the config file, nor will it convert anything. This is for testing only.)
pex hierarchy permissions.manage.users Print the complete user/group hierarchy
pex import <backend> permissions.manage.dump 選択されたフォーマットからユーザー/グループを読み込みます。
pex users cleanup <group> [threshold] permissions.manage.users.cleanup 死んだユーザーをファイルから除きます。[threshold] is in days and defaults to 30
ワールド管理系コマンド
pex worlds permissions.manage.worlds サーバーとPEXが読み込んでいるワールド一覧を表示します。
pex world <world> permissions.manage.worlds <world>が継承するPermisionsExの情報を表示します。
pex world <world> inherit <parentWorlds> permissions.manage.worlds.inheritance 親ワールドを<world>に記してください。<parentWorlds>は一つか、","で複数ワールドを指定します。
ユーザー管理コマンド
pex users list permissions.manage.users permissions.ymlに記述されているユーザーの一覧を表示します。
pex users permissions.manage.users permissions.ymlに記述されているユーザーの一覧を表示します。(上のalias)
pex user permissions.manage.users permissions.ymlに記述されているユーザーの一覧を表示します。(上のalias)
ユーザー権限の管理コマンド
pex user permissions.manage.users List the registered users
pex user <ユーザー名> permissions.manage.users.permissions.<user> <ユーザー名>で指定されたプレイヤーが持つパーミッションや権限グループを表示します。
pex user <ユーザー名> prefix [newprefix] permissions.manage.users.prefix.<user> 指定したユーザーのprefixを設定する。
prefixは例えばチャットで[管理人]等の役職を表示したい場合に有用です。
色文字を指定することが可能です。
pex user <ユーザー名> suffix [newsuffix] permissions.manage.users.suffix.<user> 指定したユーザーのsuffixを設定します。
チャット等でプレイヤー名の後にsuffixが表示されます。
pex user <ユーザー名> delete permissions.manage.users.<user> 指定したユーザーの権限情報を削除します。
pex user <ユーザー名> list [ワールド名] permissions.manage.users.permissions.<user> 指定したユーザーの指定したワールドでの権限やグループを表示します。
pex user <ユーザー名> add <権限ノード> [ワールド名] permissions.manage.users.permissions.<user> 指定したユーザーに権限ノードを付与します。
ワールド名を指定すると、指定したワールドに居る間のみ権限が付与されます。
pex user <ユーザー名> remove <権限ノード> [ワールド名] permissions.manage.users.permissions.<user> 指定したユーザーから権限ノードを剥奪します。
ワールドを指定して権限を与えていた場合は剥奪の際にもワールド名を指定してください。
pex user <ユーザー名> timed add <権限ノード> <時間(秒)> [ワールド名] permissions.manage.users.permissions.timed.<user> 指定したユーザーへ指定した時間のみ権限を付与することができます。
ワールドを指定することもできます。
pex user <ユーザー名> timed remove <権限ノード> <時間(秒)> [ワールド名] permissions.manage.users.permissions.timed.<user> 指定したユーザーへ指定した時間のみ権限を剥奪することができます。
ワールドを指定することもできます。
removeコマンドはあくまで、PermissionsExにて付与された権限のみを剥奪します。
各プラグインからデフォルトで付与されている権限を剥奪したい場合、addコマンドにて<-権限ノード>を付与してください。-と権限ノードの間にスペースは必要ありません。
pex user <user> set <option> <value> [world] permissions.manage.users.permissions.<user> Set <option> to <value>. Set value to "" (two double-quotes) if you want to remove the <option>. Specify [world] to set <option> only in [world]
ユーザーのグループ管理コマンド
pex user <ユーザー名> group list permissions.manage.membership.<user> 指定したユーザーの所属グループリストを表示します。
pex user <ユーザー名> group add <グループ名> [ワールド名] [期間(秒)] permissions.manage.membership.<group> 指定したユーザーを指定したグル―プへ所属させることができます。
ワールドや期間を指定することができます。
全ワールドに対して期間を設定したい場合、ワールド名を省略せず、'*'と指定することが可能です。
pex user <ユーザー名> group set <グループ名> [ワールド名] permissions.manage.membership.<group> 指定したユーザーを指定したグループに所属させます。
ワールドを指定することが可能です。
指定したユーザーがすでに他のグループに所属している場合、すでに所属していたグループから脱退することになる点に注意する必要があります。
pex user <ユーザー名> group remove <グループ名> [ワールド名] permissions.manage.membership.<group> 指定したユーザーを指定したグループから脱退させます。
加入時にワールド名を指定した場合、脱退時にもワールド名を指定してください。
デフォルトグループ管理コマンド
pex default group [ワールド名] permissions.manage.groups.inheritance サーバー全体(または指定ワールド)のデフォルトグループを参照します。
pex set default group <グループ名> <true/false> [ワールド名] permissions.manage.groups.inheritance trueを指定すると、指定したグループをサーバー全体(または指定ワールド)のデフォルトグループに設定します。
グループ管理コマンド
pex group permissions.manage.groups.list グループリストを表示します
pex groups permissions.manage.groups.list グループリストを表示します
pex groups list permissions.manage.groups.list グループリストを表示します
pex group <グループ名> prefix [newprefix] permissions.manage.groups.prefix.<group> 指定したグループにprefixを設定します。
[副管理人]等の役職表示に有用です。
prefixが設定された複数のグループに所属している場合、最後に設定されたグループのものが表示されるようです。
pex group <グループ名> suffix [newsuffix] permissions.manage.groups.suffix.<group> 指定したグループのsuffixを設定します。suffixはチャットログのプレイヤー名の後ろに表示されます。
pex group <グループ名> create [親グループ] permissions.manage.groups.create.<group> 指定した名前で権限グループを新しく作成します。
親グループを設定すると、親が持つ権限を継承します。
指定された権限ノードが親で指定されたものと異なる場合、子グループのものが優先されます。
pex group <グループ名> delete permissions.manage.groups.remove.<group> 指定したグループを削除します。
pex group <グループ名> parents list permissions.manage.groups.inheritance.<group> 指定したグループの親グループを表示します。
pex group <グループ名> parents set <親グループ> permissions.manage.groups.inheritance.<group> 指定したグループの親グループを設定します。
親グループは、コンマ(,)で区切ることで複数指定することができます。
pex group <グループ名> permissions.manage.groups.permissions.<group> 指定したグループに付与された権限を表示します。
pex group <グループ名> list [ワールド名] permissions.manage.groups.permissions.<group> 指定したグループに付与された権限を表示します。
指定したワールドでの権限リストを表示することもできます。
pex group <グループ名> add <権限ノード> [ワールド名] permissions.manage.groups.permissions.<group> 指定したグループに権限を付与します。
ワールド名を指定することで、指定されたワールドでのみ付与される権限を設定することができます。
pex group <グループ名> remove <権限ノード> [ワールド名] permissions.manage.groups.permissions.<group> 指定したグループから権限を剥奪します。
付与時にワールドを指定した場合、剥奪時もワールドを指定してください。
※removeコマンドはあくまで、PermissionsExにて付与された権限のみを剥奪します。
各プラグインからデフォルトで付与されている権限を剥奪したい場合、addコマンドにて<-権限ノード>を付与してください。-と権限ノードの間にスペースは必要ありません。
また、親グループから継承された権限を剥奪したい場合も同様です。
pex group <グループ名> timed add <権限ノード> [期間(秒)] [ワールド名] permissions.manage.groups.permissions.timed.<group> 指定したグループに一定期間のみ権限を付与する。
ワールドを指定することも可能です。
pex group <グループ名> timed remove <権限ノード> [ワールド名] permissions.manage.groups.permissions.timed.<group> 指定したグループに設定された期間限定の権限を剥奪します。
pex group <group> set <option> <value> [world] permissions.manage.groups.permissions.<group> Set <option> <value> for <group>. Set value to "" (two double-quotes) if you want to remove the <option>. Specify [world] if the option should be set only in [world]
pex group <グループ名> weight [優先度(整数)] permissions.manage.groups.weight.<group> 指定したグループの優先度を設定する。
複数のグループに所属してる際、どのグループの権限を優先させるかを指定する。
優先度は数値が低い方が高い。1が最も優先度が高い。
グループのユーザー管理コマンド
pex group <グループ名> users permissions.manage.membership.<group> 指定したグループに所属するプレイヤー一覧を表示します。
pex group <グループ名> user add <ユーザー名> permissions.manage.membership.<group> 指定したグループにプレイヤーを追加します。
コンマでわけることで、複数のプレイヤーを指定することができます。
pex group <グループ名> user remove <ユーザー名> permissions.manage.membership.<group> 指定したグループからプレイヤーを脱退させます。
コンマでわけることで、複数のプレイヤーを指定することができます。
pex promote <user> <ladder> permissions.user.promote.<ladder> Promote <user> on <ladder>. If <ladder> is not specified, the default ladder (named default) will be used.
pex demote <user> <ladder> permissions.user.demote.<ladder> Demote <user> on <ladder>. If <ladder> is not specified, the default ladder (named default) will be used.

config.ymlの初期設定

バージョン: 1.23.4

multiserver:
  use-netevents: true
permissions:
  debug: false
  allowOps: false
  user-add-groups-last: false
  log-players: false
  createUserRecords: false
  backend: file
  informplayers:
    changes: false
  basedir: plugins/PermissionsEx
  backends:
    file:
      type: file
      file: permissions.yml
updater: true
alwaysUpdate: false

config.ymlの設定変更

< - >: 前後の数字の範囲の中でいずれかを選択することを表しています。
< / >: 前後のどちらかを選択することを表しています。
<true/false>: その項目の機能を有効/無効にするかを選択するものです(true→有効,false→無効)。
string: 文字列、つまりテキスト、文章を書くことを表しています。
number: 数字を書くことを表しています。
(入力の際<>は不要です)

項目 デフォルト 説明
項目1 デフォルト1 説明1
項目2 デフォルト2 説明2


(t/f): 有効および無効をtrueとfalseで切り替えるものです。

permissions:
    backends:    <--バックエンドの定義の設定。
        file:    <-- 基本的なバックエンドファイルの種類の設定。
            file: permissions.yml    <-- 使うためのファイルの名前の指定。
    backend: file    <--開始時にバックエンドファイルを使用する設定
    createUserRecords: false    <--他の設定(t/f)
    allowOps: false    <--?(t/f)
    debug: false    <--デバッグモードを利用するのか。(有効にした場合ログが大変なことになるらしいです)(t/f)
    user-add-groups-last: false    <--?(t/f)
    basedir: plugins/PermissionsEx    <--指定したいファイルの場所(バックエンドファイルのみ)
    informplayers:
        changes: false    <-- Whether to notify players when they have their permissions changed(t/f)
multiserver:
    use-netevents: true    <--?(t/f)
updater: true    <--起動時のアップデートを利用するか。(t/f)
alwaysUpdate: false    <--いつもアップデートを利用するのか。(t/f)

permissions.ymlの初期設定

バージョン: 1.23.4

groups:
  default:
    options:
      default: true
    permissions:
    - modifyworld.*
schema-version: 1

permissions.ymlの設定変更(基礎)

  • YAML形式の記述方法についてはYAMLファイルを参照して下さい。

この項目ではModifyworld(公式Wiki(en))を使用して説明します。
※Modifyworldとは、PermissionsExと組み合わせて使用し、権限を付与しないかぎり、許可した以外の操作(他のプラグイン等は含まない)が出来ないようにするプラグインです。

permissions.ymlを編集する際の注意点

YAML形式は空白が大切です。ですので日本非公式ユーザーフォーラム等で質問をする際には空白が回答者にわかるようにして下さい。

  • YAMLでは既に「'」「-」「:」「#」「%」「.」が予約文字として使われています。そのためそれらの文字を予約文字として使用されないようにするには「"」で囲む必要があります。
    例:「%prefix%player%suffix> &e%message」では無効で「"%prefix%player%suffix> &e%message"」で有効となります。
  • 数字で構成されているのは「'」で囲む必要があります。
    例:「rank: 1000」や「45625:」では無効で「rank: '1000'」や「'45625': 」では有効となります。
  • YAML形式の仕様ではありませんが、PEXでは「}」「{」「)」「(」「?」「*」も予約文字として使われています。
  • 字下げは、スペース2つで行ってください。ファイル内でTAB文字は使用できません。
  • それぞれのグループはラインの初めから始める必要があります。また、そのセクション内に含まれる各セクションでは、字下げを行う必要があります。

初期設定の理解

編集するにはまず何が書いてあるかを理解しなくてはいけません。
初期設定を説明します。

groups:    <--グループの設定を始めるという目印。
  default:    <--defaultという名前のグループの設定を始めるという目印。
    options:       <--oprion(オプション)の設定を始めるという目印。
      default: true    <--標準でこのグループに所属するかの設定。
    permissions:    <--Permission(権限)の設定をはじめるという目印。
    - modifyworld.*    <--実際の権限(この場合はmodifyworld.以下の権限をすべて与えるという意味)
schema-version: 1    <--触らないで下さい。どの形式で書くのかを宣言。

※「.*」とは、「.」以下のもの全てという意味のワイルドカードです。

管理者グループの追加

次に管理者のグループを追加してみましょう。
追加する場合はgroups:の下に次のような形の文を挿入します。

  グループ名:
    options:
      default: false
    permissions:

では実際に管理者権限を持つAdminグループを作成してみます。

groups:
  default:
    permissions:
    - modifyworld.*
    options:
      default: true
  Admin:
    options:
      default: false    <--default設定がfalseなので標準では属さないようになります。
    permissions:
    - '*'    <--ワイルドカードですべての権限を与える。

Adminグループは標準では誰も属さず、全ての権限があります。
注意ですが、Adminのpermissionsのところに

- '*'

と書いていますが、これがもし

- '*

だとエラーで動作しませんので注意してください。

モデレーターグループの追加

今回モデレーターグループと書きましたが、名前はなんでもいいです。
以下の権限を与えてみます。

  • BanとBan解除コマンドの使用
  • ゲームモードの変更
  • tpコマンドの使用

まず権限を与えるにはその権限に対応したパーミッションノードを知る必要があります。
CraftBukkit標準のコマンドの権限はサーバーコマンドに記載してあります。

では書いていきましょう。

groups:
  default:
    options:
      default: true
    permissions:
    - modifyworld.*
  Admin:
    options:
      default: false
    permissions:
    - '*'
  Moderator:
    options:
      default: false
    inheritance:
    - default
    permissions:
    - bukkit.command.ban.player
    - bukkit.command.unban.player
    - bukkit.command.gamemode
    - bukkit.command.teleport

今回また新しい設定が出てきました。

inheritance:
- default

これはdefaultグループの権限を継承するという意味です。
つまりModeratorグループはdefaultグループの権限も持っているという意味です。

ユーザーの権限グループ変更

このままだと管理者が入った場合でもdefaultグループになってしまいます。
ですので、ユーザーにグループを設定します。
今まで書いてきたpermissions.ymlファイルの下に以下の内容を追記してくだい。

users:
  自分のMinecraftIDのUUID:
    group:
    - Admin
    options:
      name: 自分のMinecraftID

現時点でこうなっているはずです。

groups:
  default:
    options:
      default: true
    permissions:
    - modifyworld.*
  Admin:
    options:
      default: false
    permissions:
    - '*'
  Moderator:
    options:
      default: false
    inheritance:
    - default
    permissions:
    - bukkit.command.ban.player
    - bukkit.command.unban.player
    - bukkit.command.gamemode
    - bukkit.command.teleport
users:
  自分のMinecraftIDのUUID:
    group:
    - Admin
    options:
      name: 自分のMinecraftID

これで自分をAdminグループに設定しました。
これ以降ユーザーを追加する場合は

  自分のMinecraftIDのUUID:
    group:
    - Admin
    options:
      name: 自分のMinecraftID

を追記します。

以上で簡単な説明は終わりです。
更に進めたい方は下記の#permissions.ymlの設定変更(高度)を確認してください。

permissions.ymlの設定変更(高度)

前の項目(基礎)が終わっていることが前提です。
高度な設定なので慣れてない人はおすすめしません。
※一部分を抜き出して記載している事があります。

この項目でもModifyworld(公式Wiki(en))を使用して説明します。
※Modifyworldとは、PermissionsExと組み合わせて使用し、権限を付与しないかぎり、許可した以外の操作(他のプラグイン等は含まない)が出来ないようにするプラグインです。

特定の権限を剥奪する

(一部分を抜き出して記載しています)

groups:
  default:
    options:
      default: true
    permissions:
    - modifyworld.*

例えばこの権限からチャットする権限を剥奪するとしましょう。
このように記述します。

groups:
  default:
    options:
      default: true
    permissions:
    - -modifyworld.chat
    - modifyworld.*

これでdefaultグループはチャットが出来ないはずです。
この時注意すべき点は許可する権限の前に記述する事です。

これだと動作しません。(チャットが出来てしまう)

groups:
  default:
    options:
      default: true
    permissions:
    - modifyworld.*
    - -modifyworld.chat

ですので、許可する権限の前に記述して下さい。

ワールド毎に権限設定

(一部分を抜き出して記載しています)

groups:
  default:
    options:
      default: true
    permissions:
    - modifyworld.*

では例として以下の条件を適応したものを作ります。

  • defaultグループはsurvivalワールドにてmodifyworldの全権限を得る。
  • defaultグループはcreativeワールドにてmodifyworldの全権限とゲームモードを変更する権限を得る。
  • memberグループはsurvivalワールドにてdefaultグループの権限を継承しつつTPコマンドを実行する権限を得る。
  • memberグループはcreativeワールドにてdefaultグループの権限を継承しつつチャットが出来ないようにする。

このように記述します。

groups:
  default:
    options:
      default: true
    permissions:
      worlds:
        survival:
          permissions:
          - modifyworld.*
        creative:
          permissions:
          - modifyworld.*
          - bukkit.command.gamemode
  member:
    inheritance:
      - default
    permissions:
      worlds:
        survival:
          permissions:
          - bukkit.command.teleport
        creative:
          permissions:
          - -modifyworld.chat

UUIDのサポート

PEX supports UUIDs and will migrate users over to UUID as they log in or are referenced by other PermissionsEx functions. The player's last known name will be stored under the name option, which can allow for reverting changes (though this is still complicated, so read this section before proceeding) However, there are some things to take note of if your server is run in offline mode for any reason.

When your server is run in offline mode, UUIDs are based on name alone. This means that by default if a user changes their name, even if the user would be able to authenticate with Mojang, their UUID will change. However, some proxy configurations have methods of circumventing this limitation.

BungeeCordでのUUIDの利用

BungeeCordサーバー上でUUIDを取得するには、サーバーがSpigotであり、なおかつspigot.yml内のbungecordがtrueになっている事で可能となります。
また、VanilaCord(BungeeCord内で説明)を用いることで公式サーバーでも使用することができます。

LilyPadでのUUIDの利用

LilyPadサーバー上でUUIDを取得するには、"LilyPad Bukkit-Connect plugin"を導入するだけで可能です。

リンク