Splaturn内部で使用されている許可管理ライブラリです。 クラスベースでの許可実装を助けるためのものです。
まず、許可の一覧をsplaturn\permissions\PermissionsLayer
を実装したクラスにより定義します。
クラスはプロパティの型がすべてbool
である必要があります。
また、デフォルト値を持ってもなりません。
これらの仕様を満たしているかを確認するのにsplaturn\permissions\PermissionsValidator
が使用できます。
テストなどで用いると良いでしょう。
-
Good
use splaturn\permissions\PermissionsLayer; class YourPermissionsLayer implements PermissionsLayer{ public bool $takeItem; public bool $dropItem; }
-
Bad
use splaturn\permissions\PermissionsLayer; class YourPermissionsLayer implements PermissionsLayer{ public ?bool $takeItem; // must not be nullable public string $dropItem; // must not be types other than bool public bool $useItem = false; // must not have default value }
許可の計算をするにはsplaturn\permissions\PermissionsCalculator::calculate()
を使用します。
最初のパラメータはベースとなる許可レイヤー(PermissionsLayers)です。 このレイヤーはすべてのプロパティが定義されている必要があります。
二つ目のパラメータはベースの上に重ねられるレイヤーの配列です。 定義されている中で一番先頭の値が結果に入れられます。
上で定義したYourPermissionsLayer
を例にします。
use splaturn\permissions\PermissionsCalculator;
/**
* @var YourPermissionsLayer[] $layers
* @var YourPermissionsLayer $base
**/
$result = PermissionsCalculator::calculate($base, $layers);
layer | takeItem | dropItem |
---|---|---|
1 | ✅ | |
2 | ❌ | |
3 | ✅ | |
base | ❌ | ❌ |
このような場合、$result->takeItem
はfalse
、$result->takeItem
はtrue
となります。
上から覗いて見たときに一見えているものが採用されるということです。