> ## Documentation Index
> Fetch the complete documentation index at: https://cs-lua.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# access — Объявление

> Права как именованные ноды, группы и иммунитет

# Объявление

<h2 id="declare">
  access.declare
</h2>

Объявляет ноду прав.

```lua theme={null}
access.declare(node[, opts])
```

### Аргументы

| # | имя    | тип          |                                |
| - | ------ | ------------ | ------------------------------ |
| 1 | `node` | string       | конкретная нода, без звёздочек |
| 2 | `opts` | table \| nil | см. [Опции](#declare-опции)    |

### Возвращает

Ничего.

<h3 id="declare-опции">
  Опции
</h3>

| поле      | тип               |                                                         |
| --------- | ----------------- | ------------------------------------------------------- |
| `desc`    | string            | описание для `lua_perms list`                           |
| `default` | string \| boolean | группа, которой нода выдана по умолчанию; `true` — всем |
| `plugin`  | string            | владелец в `lua_perms list`; по умолчанию `plugin.id()` |

### Пример

```lua theme={null}
access.declare("shop.vip.buy", { desc = "Покупка в VIP-магазине", default = "vip" })
```

Объявление необязательно, но даёт две вещи: нода попадает в `lua_perms list` с
именем плагина-владельца, а опечатка в `p:can("shop.vip.by")` выводит
предупреждение в консоль вместо тихого отказа.

`default` действует с самым низким приоритетом: любой `deny` в файлах забирает
ноду обратно.

`plugin` указывать почти никогда не нужно: раз `access.declare` вызывается из
`manifest.lua`, движок и так знает, чей это плагин, через `plugin.id()`. Опция
существует для нод, которые объявляет `core/`, где своего плагина нет.

<h2 id="rule">
  access.rule
</h2>

Задаёт динамическое правило для ноды.

```lua theme={null}
access.rule(node, fn)
```

### Аргументы

| # | имя    | тип      |                                         |
| - | ------ | -------- | --------------------------------------- |
| 1 | `node` | string   | нода                                    |
| 2 | `fn`   | function | получает `(p, ctx)`, возвращает boolean |

### Возвращает

Ничего.

### Пример

```lua theme={null}
access.rule("shop.buy", function(p, ctx)
	return p:playtime() > 3600
end)
```

Для случаев, когда правом управляет логика, а не таблица.

<Note>
  Правило вызывается **только если ноду не покрыл никто**. Явный
  `deny` в файлах всегда сильнее.
</Note>
