Права и возможности
Проверка прав игроков, источников команд и возможностей, разрешенных хостом.
В этом разделе
Другие страницы раздела:
Права игроков
ctx.Permissions() дает проверки прав для онлайн-игроков и источников команд. Права игрока хранятся в entity property permissions и синхронизируются через metadata сущности.
player-permissions.go
permissions := ctx.Permissions()if err := permissions.GrantPlayer("p1", "arena.join", "arena.admin.*"); err != nil { return err}if permissions.PlayerCan("p1", "arena.admin.kick") { _ = ctx.Gameplay().Players().Resolve("p1")}if err := permissions.RevokePlayer("p1", "arena.admin.*"); err != nil { return err}Matcher поддерживает *, точные имена и prefix wildcard вроде arena.admin.*.
Источники команд
Команда может объявить permission и дополнительно проверить source внутри executor, если правило зависит от текущего состояния сервера.
command-source.go
ctx.RegisterCommand(command.New("arena"). Permission("arena.join"). Executor(func(_ context.Context, cmd command.Context) (command.Result, error) { if !ctx.Permissions().SourceCan(cmd.Source, "arena.join") { return command.Result{}, fmt.Errorf("missing permission") } return command.Result{Messages: []string{"joined"}}, nil }))Capabilities хоста
Capabilities нужны как ограничения для plugin host. Пустой ManagerConfig.Capabilities оставляет режим совместимости и разрешает все capabilities. Если host задает список, HasCapability и RequireCapability начинают его применять.
capabilities.go
if err := ctx.RequireCapability("world.query"); err != nil { return err}if ctx.HasCapability("forms") { // Register form-heavy commands.}