Documentation · 04
Capabilities и разрешения
Capability — это конкретная возможность, а не общее разрешение.
04 Capabilities и разрешения
Capability — это конкретная возможность, а не общее разрешение. Вместо filesystem = true приложение заявляет, что именно ему нужно.
4.1Что такое capability
{
"capabilities": {
"filesystem.read": { "scope": "workspace" },
"process.execute": { "scope": "values", "targets": ["git"] },
"network.connect": { "scope": "values", "targets": ["api.example.com"] }
}
}
Точные «цели» (targets) делают права проверяемыми: process.execute разрешает только перечисленные команды, network.connect — только перечисленные хосты.
4.2Формы и scope
Capability может быть объявлена как boolean, как string-scope или как объект со scope и targets:
| Форма | Пример | Что значит |
|---|---|---|
true | "storage.get": true | Capability доступна без ограничений |
| string | "filesystem.read": "workspace" | Scope задан строкой |
| object | {"scope": "values", "targets": ["git"]} | Scope + точные цели (домены, команды) |
Scopes:
- workspace — текущий workspace приложения (проект);
- storage — хранилище приложения;
- values — конкретные значения (хосты, команды);
- any — без ограничений в рамках capability.
4.3Справочник capabilities
| Capability | Семейство | Описание |
|---|---|---|
filesystem.read | filesystem | Читать файлы проекта |
filesystem.write | filesystem | Изменять файлы проекта |
workspace.read | workspace | Читать workspace |
workspace.write | workspace | Записывать в workspace |
process.execute | process | Запускать native процессы (targets — допустимые команды) |
network.connect | network | Открывать сетевые соединения |
storage.get | storage | Читать хранилище приложения |
storage.set | storage | Записывать хранилище приложения |
secrets.read | secrets | Читать секреты (токены, ключи) |
secrets.write | secrets | Записывать секреты |
ipc.call | ipc | Вызывать сервисы через IPC |
window.open | window | Управлять окнами |
Платформенная доступность. Не каждая capability есть на каждой ОС. Например,
process.execute есть на desktop, но отсутствует на iOS. Проверяйте через axion.capabilities.has().4.4Permission Broker
Политика по умолчанию — default deny: пока пользователь не дал явного разрешения, обращение к capability блокируется.
- Приложение вызывает, например,
window.axion.fs.readFile(). - Engine проверяет: capability заявлена в manifest и решение пользователя отсутствует.
- Движок возвращает структурированную ошибку
AXION_PERMISSION_NEEDED ticket=<uuid>. - Мост показывает диалог: «Приложение запрашивает доступ: filesystem.read».
- Пользователь нажимает «Разрешить» или «Отказать». Решение запоминается.
После «Разрешить» право больше не спрашивается; «Отказать» тоже запоминается. Права хранятся в ~/.axion/permissions.json и переживают перезапуск.
axion permissions # текущая политика
axion permissions grant my-app filesystem.read
axion permissions grant my-app process.execute git
axion permissions revoke my-app network.connect
Безопасность. Каждый ticket одноразовый и привязан к приложению — приложение не может выдать само себе права без диалога с пользователем.
Готовы собрать свой первый .axn?Двадцать минут на настройку — и приложение на пяти платформах.
window.axion API