Права и возможности

Проверка прав игроков, источников команд и возможностей, разрешенных хостом.

В этом разделе

Другие страницы раздела:

Права игроков

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.}