Поиск и фильтрация данных

С помощью объекта класса App\Services\Game\Permissions\Funnel можно производить фильтрацию разрешений пользователя или группы.

Все объекты-коллекции ниже имеют тип Doctrine\Common\Collections\Collection.

Предикат

Предикат - DTO класс, используемый для описание правил фильтрации данных.

Для фильтрации разрешений требуется объект типа App\Services\Game\Permissions\Predicates\PermissionPredicate.

App\Services\Game\Permissions\Funnel::filterPlayerPermissions()

Метод принимает в качестве параметров объект игрока, чьи разрешения нужно отфильтровать и объект PermissionPredicate. Возвращает коллекцию отфильтрованных разрешений.

$player = $storage->retrievePlayerByUsername('admin');
$funnel = new Funnel();
$predicate = (new PermissionPredicate())
->setPermission(new Regex('/^minecraft\..+$/ui'))
->setAnyServer(false)
->setServer('3');
$result = $funnel->filterPlayerPermissions($player, $predicate);

Приведенный выше код производит фильтрацию разрешений пользователя в переменную $result по следующим критерия:

  • Имя разрешения начинается с "minecraft."

  • Разрешение относится к серверу "3 ".

App\Services\Game\Permissions\Funnel::filterGroupPermissions()

Метод принимает в качестве параметров объект группы, чьи разрешения нужно отфильтровать и объект PermissionPredicate. Возвращает коллекцию отфильтрованных разрешений.

$group= $storage->retrieveGroup('players');
$funnel = new Funnel();
$predicate = (new PermissionPredicate())
->setPermission('groupmanager.manuadd')
->setAnyServer(true)
->setAnyWorld(false)
->setWorld('nether');
$result = $funnel->filterGroupPermissions($group, $predicate);

Приведенный выше код производит фильтрацию разрешений группы в переменную $result по следующим критерия:

  • Имя разрешения в точности соответствует - "groupmanager.manuadd".

  • Разрешение относится к любому серверу.

  • Разрешение относится к миру "nether".

App\Services\Game\Permissions\Funnel::filterPermissions()

Фильтрует коллекцию разрешений переданным предикатом.

$collection = ...; // Исходная коллекция разрешений.
$funnel = new Funel();
$predicate = (new PermissionPredicate())
->setAnyContexts(false)
->setContexts('{}');
$result = $funnel->filterPermissions($collection, $predicate);