Axion Платформа Скачать
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": trueCapability доступна без ограничений
string"filesystem.read": "workspace"Scope задан строкой
object{"scope": "values", "targets": ["git"]}Scope + точные цели (домены, команды)

Scopes:

  • workspace — текущий workspace приложения (проект);
  • storage — хранилище приложения;
  • values — конкретные значения (хосты, команды);
  • any — без ограничений в рамках capability.

4.3Справочник capabilities

CapabilityСемействоОписание
filesystem.readfilesystemЧитать файлы проекта
filesystem.writefilesystemИзменять файлы проекта
workspace.readworkspaceЧитать workspace
workspace.writeworkspaceЗаписывать в workspace
process.executeprocessЗапускать native процессы (targets — допустимые команды)
network.connectnetworkОткрывать сетевые соединения
storage.getstorageЧитать хранилище приложения
storage.setstorageЗаписывать хранилище приложения
secrets.readsecretsЧитать секреты (токены, ключи)
secrets.writesecretsЗаписывать секреты
ipc.callipcВызывать сервисы через IPC
window.openwindowУправлять окнами
Платформенная доступность. Не каждая capability есть на каждой ОС. Например, process.execute есть на desktop, но отсутствует на iOS. Проверяйте через axion.capabilities.has().

4.4Permission Broker

Политика по умолчанию — default deny: пока пользователь не дал явного разрешения, обращение к capability блокируется.

  1. Приложение вызывает, например, window.axion.fs.readFile().
  2. Engine проверяет: capability заявлена в manifest и решение пользователя отсутствует.
  3. Движок возвращает структурированную ошибку AXION_PERMISSION_NEEDED ticket=<uuid>.
  4. Мост показывает диалог: «Приложение запрашивает доступ: filesystem.read».
  5. Пользователь нажимает «Разрешить» или «Отказать». Решение запоминается.

После «Разрешить» право больше не спрашивается; «Отказать» тоже запоминается. Права хранятся в ~/.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