Разрешения

Разрешения объявляются в manifest.json и фиксируются на время жизни воркера. Пользователь должен подтвердить их при установке.

Проверяйте в рантайме через permissions.has(AddonsPermission.NAME). При отказе в доступе пишется предупреждение в лог и возвращается false. ROOT обходит каждую отдельную проверку.

Список разрешений

Разрешение Описание
ROOT Все возможности (только для разработки; избегайте в продакшене)
INCREASE_CONFIG_SIZE Повышает лимит размера params аддона с 10 КБ до 1 МБ JSON
CONFIG_READ api.config.getConfig() — чтение полного конфига приложения
CONFIG_WRITE api.config.setConfig() — запись конфига приложения
ADDON_CONFIG_READ api.config.getAddonParams(otherAddonId) — чтение params другого аддона (чувствительно; выделяется в UI)
NETWORK_REQUEST Исходящий HTTP: network.request.get/post/put/delete/postForm
NETWORK_WEBSOCKET Исходящий WebSocket: network.websocket.connect
WEB_END_POINTS Входящие HTTP-маршруты: network.endpoints.create
SOCKET_END_POINTS Пространства имён Socket.IO: network.socketEndpoints
WEB_CONTENT Раздача manifest.web и web_contents по /addon_static/{id}/
STATUS Строка состояния: status.Update, status.OnClick
NOTIFY Уведомления в заголовке окна: notify.Send
DASHBOARD_EVENTS Виджет последних событий: dashboard.addRecord, registerTriggers, …
DASHBOARD_CHAT Вывод и отправка в окне чата: addChatMessage, onChatSend, …
DASHBOARD_CHAT_INCOMING Подписка на строки чата: onChatMessage / offChatMessage
DASHBOARD_EVENTS_INCOMING Подписка на записи событий: onRecord / offRecord

Пример

if (!permissions.has(AddonsPermission.NETWORK_REQUEST)) {
  console.warn('Network disabled');
  return;
}

const body = await network.request.get('https://api.example.com/status');

Принцип минимальных привилегий

Запрашивайте только те разрешения, которые реально использует аддон. Для страниц виджета/приложения, которым нужен только статический хостинг, может хватить одного WEB_CONTENT. Добавляйте WEB_END_POINTS, когда воркер должен отдавать HTTP API встроенной странице.