Разрешения
Система разрешений контролирует доступ к ресурсам (например, к файловой системе, сети, переменным окружения).
Запрашивайте разрешения явно, повышая безопасность и доверие пользователей.
Например, Deno.permissions
класс Deno.Permissions
API управления разрешениями Deno.
Класс, предоставляющий интерфейс для глобального экземпляра Deno.permissions и основанный на веб-платформе Permissions API. Однако некоторые предлагаемые части API, полезные в контексте серверной среды выполнения, были удалены или оставлены без внимания в спецификации веб-платформы, поэтому было решено разместить его в пространстве имён Deno.
По умолчанию, если stdin/stdout является TTY для Deno CLI (то есть может отправлять и получать текст), CLI предложит пользователю предоставить разрешение при запросе разрешения, которое ещё не предоставлено. Это поведение можно изменить с помощью команды --no-prompt при запуске. При запросе CLI будет запрашивать максимально узкое разрешение, что потенциально может раздражать пользователя. API разрешений позволяет автору кода одновременно запрашивать более широкий набор разрешений, чтобы обеспечить более удобный интерфейс для пользователя.
Методы
query(desc: PermissionDescriptor): Promise<PermissionStatus> Возвращает результат, разрешающийся в текущий статус разрешения.
Обратите внимание: если разрешение уже предоставлено, request() не будет повторно запрашивать его у пользователя. Поэтому query() требуется только в том случае, если необходимо по-другому обрабатывать существующие разрешения, не изменяя их и не предлагая пользователю изменить их.
const status = await Deno.permissions.query({ name: "read", path: "/etc" });
console.log(status.state);
Возвращает текущий статус разрешения.
Обратите внимание: если разрешение уже предоставлено, request() не будет повторно запрашивать его у пользователя. Поэтому querySync() требуется только в том случае, если необходимо по-другому обрабатывать существующие разрешения, не изменяя их и не предлагая пользователю изменить их.
const status = Deno.permissions.querySync({ name: "read", path: "/etc" });
console.log(status.state);
request(desc: PermissionDescriptor): Promise<PermissionStatus> Запрашивает разрешение и возвращает результат, разрешающийся в состояние разрешения.
Если разрешение уже предоставлено, пользователю не будет предложено предоставить его повторно.
const status = await Deno.permissions.request({ name: "env" });
if (status.state === "granted") {
console.log("'env' permission is granted.");
} else {
console.log("'env' permission is denied.");
}
Запрашивает разрешение и возвращает его состояние.
Если разрешение уже предоставлено, пользователю не будет предложено предоставить его повторно.
const status = Deno.permissions.requestSync({ name: "env" });
if (status.state === "granted") {
console.log("'env' permission is granted.");
} else {
console.log("'env' permission is denied.");
}
revoke(desc: PermissionDescriptor): Promise<PermissionStatus> Отзывает разрешение и возвращает результат, разрешающийся в состояние разрешения.
import { assert } from "jsr:@std/assert";
const status = await Deno.permissions.revoke({ name: "run" });
assert(status.state !== "granted")
Отзывает разрешение и возвращает его состояние.
import { assert } from "jsr:@std/assert";
const status = Deno.permissions.revokeSync({ name: "run" });
assert(status.state !== "granted")
класс Deno.PermissionStatus
EventTarget, возвращаемый API Deno.permissions, который может сообщать об изменениях состояния разрешения.
Свойства
onchange: ((
this: PermissionStatus,
ev: Event,
) => any) | null partial: boolean Указывает, предоставлено ли разрешение лишь частично. Например, доступ может быть разрешён к каталогу "/foo", но запрещён к каталогу "/foo/bar". В этом случае при запросе разрешений на чтение для каталога "/foo" этому полю будет присвоено значение true.
state: PermissionState Методы
addEventListener<K extends keyof PermissionStatusEventMap>(
type: K,
listener: (
this: PermissionStatus,
ev: PermissionStatusEventMap[K],
) => any,
options?: boolean | AddEventListenerOptions,
): void addEventListener(
type: string,
listener: EventListenerOrEventListenerObject,
options?: boolean | AddEventListenerOptions,
): void removeEventListener<K extends keyof PermissionStatusEventMap>(
type: K,
listener: (
this: PermissionStatus,
ev: PermissionStatusEventMap[K],
) => any,
options?: boolean | EventListenerOptions,
): void removeEventListener(
type: string,
listener: EventListenerOrEventListenerObject,
options?: boolean | EventListenerOptions,
): void интерфейс Deno.EnvPermissionDescriptor
Дескриптор разрешения для разрешений allow-env и deny-env, определяющий доступ к чтению и записи переменных среды процесса, а также к другим сведениям о среде. Параметр variable позволяет ограничить разрешение конкретной переменной среды.
Свойства
интерфейс Deno.FfiPermissionDescriptor
Дескриптор разрешения для разрешений allow-ffi и deny-ffi, определяющий доступ к загрузке внешнего кода и взаимодействию с ним через API внешнего интерфейса функций, доступный в Deno. Параметр path позволяет ограничить разрешение конкретным путём на хосте.
Свойства
интерфейс Deno.ImportPermissionDescriptor
Дескриптор разрешения для разрешений allow-import и deny-import, определяющий доступ к импорту с удалённых хостов через сеть. Параметр host позволяет ограничить разрешение на исходящее соединение конкретным хостом и портом.
Свойства
name: "import" host: string Необязательная строка хоста в формате "<hostname>[:<port>]". Примеры:
"github.com" "deno.land:8080"
интерфейс Deno.NetPermissionDescriptor
Дескриптор разрешения для разрешений allow-net и deny-net, определяющий доступ к открытию сетевых портов и подключению к удалённым хостам через сеть. Параметр host позволяет ограничить разрешение на исходящее соединение конкретным хостом и портом.
Свойства
name: "net" host: string Необязательная строка хоста в формате "<hostname>[:<port>]". Примеры:
"github.com" "deno.land:8080"
интерфейс Deno.PermissionOptionsObject
Набор параметров, позволяющих точно определить разрешения в контексте теста или рабочего процесса.
Свойства
env:
"inherit"
| boolean
| string[]
= false Указывает, следует ли запрашивать или отзывать разрешение env. Если задано значение "inherit", будет унаследовано текущее разрешение env. Если задано значение true, будет запрошено глобальное разрешение env. Если задано значение false, глобальное разрешение env будет отозвано.
ffi:
"inherit"
| boolean
| Array<string | URL>
= false Указывает, следует ли запрашивать или отзывать разрешение ffi. Если задано значение "inherit", будет унаследовано текущее разрешение ffi. Если задано значение true, будет запрошено глобальное разрешение ffi. Если задано значение false, глобальное разрешение ffi будет отозвано.
import:
"inherit"
| boolean
| Array<string>
Указывает, следует ли запрашивать или отзывать разрешение import. Если задано значение "inherit", будет унаследовано текущее разрешение import. Если задано значение true, будет запрошено глобальное разрешение import. Если задано значение false, глобальное разрешение import будет отозвано. Если задано значение Array<string>, будут запрошены разрешения import для указанных доменов.
net:
"inherit"
| boolean
| string[]
= false Указывает, следует ли запрашивать или отзывать разрешение net. Если задано значение "inherit", будет унаследовано текущее разрешение net. Если задано значение true, будет запрошено глобальное разрешение net. Если задано значение false, глобальное разрешение net будет отозвано. Если задано значение string[], будет запрошено разрешение net для указанных строк хоста в формате "<host>[:<port>].
read:
"inherit"
| boolean
| Array<string | URL>
= false Указывает, следует ли запрашивать или отзывать разрешение read. Если задано значение "inherit", будет унаследовано текущее разрешение read. Если задано значение true, будет запрошено глобальное разрешение read. Если задано значение false, глобальное разрешение read будет отозвано. Если задано значение Array<string | URL>, будет запрошено разрешение read для указанных путей к файлам.
run:
"inherit"
| boolean
| Array<string | URL>
= false Указывает, следует ли запрашивать или отзывать разрешение run. Если задано значение "inherit", будет унаследовано текущее разрешение run. Если задано значение true, будет запрошено глобальное разрешение run. Если задано значение false, глобальное разрешение run будет отозвано.
sys:
"inherit"
| boolean
| string[]
= false Указывает, следует ли запрашивать или отзывать разрешение sys. Если задано значение "inherit", будет унаследовано текущее разрешение sys. Если задано значение true, будет запрошено глобальное разрешение sys. Если задано значение false, глобальное разрешение sys будет отозвано.
write:
"inherit"
| boolean
| Array<string | URL>
= false Указывает, следует ли запрашивать или отзывать разрешение write. Если задано значение "inherit", будет унаследовано текущее разрешение write. Если задано значение true, будет запрошено глобальное разрешение write. Если задано значение false, глобальное разрешение write будет отозвано. Если задано значение Array<string | URL>, будет запрошено разрешение write для указанных путей к файлам.
интерфейс Deno.PermissionStatusEventMap
Интерфейс, определяющий типы событий, поддерживаемые экземплярами PermissionStatus.
Свойства
change: Event интерфейс Deno.ReadPermissionDescriptor
Дескриптор разрешения для разрешений allow-read и deny-read, определяющий доступ к чтению ресурсов с локального хоста. Параметр path позволяет ограничить разрешение конкретным путём (а если путь является каталогом — любыми вложенными путями).
Разрешение, предоставленное с помощью allow-read, позволяет коду среды выполнения только пытаться читать данные; операционная система может применять дополнительные разрешения.
Свойства
интерфейс Deno.RunPermissionDescriptor
Дескриптор разрешения для разрешений allow-run и deny-run, определяющий, какие дочерние процессы могут выполняться в Deno. Параметр command позволяет ограничить разрешение конкретным исполняемым файлом.
Предупреждение: на практике allow-run фактически эквивалентно allow-all, поскольку вредоносный код может выполнить любой произвольный код на хосте.
Свойства
интерфейс Deno.SysPermissionDescriptor
Дескриптор разрешения для разрешений allow-sys и deny-sys, определяющий доступ к конфиденциальным сведениям о хост-системе, которые вредоносный код может попытаться использовать. Параметр kind позволяет ограничить разрешение конкретным видом сведений.
Свойства
интерфейс Deno.WritePermissionDescriptor
Дескриптор разрешения для разрешений allow-write и deny-write, определяющий доступ к записи ресурсов на локальном хосте. Параметр path позволяет ограничить разрешение конкретным путём (а если путь является каталогом — любыми вложенными путями).
Разрешение, предоставленное с помощью allow-write, позволяет коду среды выполнения только пытаться записывать данные; операционная система может применять дополнительные разрешения.
Свойства
псевдоним типа Deno.PermissionDescriptor
Дескрипторы разрешений, определяющие разрешение и позволяющие запрашивать, получать или отзывать его.
Дополнительные сведения о каждом типе разрешения см. в описаниях отдельных дескрипторов.
Определение
псевдоним типа Deno.PermissionName
Название привилегированной функции, для которой требуется разрешение.
Определение
"run"
| "read"
| "write"
| "net"
| "env"
| "sys"
| "ffi"
псевдоним типа Deno.PermissionOptions
Параметры, определяющие разрешения в контексте теста или рабочего процесса.
"inherit" гарантирует, что в контексте теста будут применены все разрешения родительского процесса. "none" гарантирует, что у контекста теста не будет разрешений. PermissionOptionsObject предоставляет контексту теста более конкретный набор разрешений.
Определение
псевдоним типа Deno.PermissionState
Текущее состояние разрешения:
-
"granted"— разрешение предоставлено. -
"denied"— в предоставлении разрешения явно отказано. -
"prompt"— разрешение явно не предоставлено и не запрещено.
Определение
"granted"
| "denied"
| "prompt"
переменная Deno.permissions
API управления разрешениями в Deno.
Это единственный экземпляр объекта Permissions, основанный на API разрешений веб-платформы Permissions API. Однако некоторые предлагаемые части API, полезные в контексте серверной среды выполнения, были удалены или исключены из спецификации веб-платформы, поэтому было решено разместить этот API в пространстве имён Deno.
По умолчанию, если stdin/stdout является TTY для Deno CLI (то есть может отправлять и получать текст), CLI предложит пользователю предоставить разрешение при запросе ещё не предоставленного разрешения. Это поведение можно изменить с помощью команды --no-prompt при запуске. При запросе разрешения CLI запрашивает максимально узкий набор разрешений, что может раздражать пользователя. API разрешений позволяют автору кода за один раз запросить более широкий набор разрешений, чтобы улучшить взаимодействие с пользователем.
Запрос уже предоставленных разрешений не приведёт к появлению запроса пользователю; будет возвращено сообщение о том, что разрешение предоставлено.
Проверка
const status = await Deno.permissions.query({ name: "read", path: "/etc" });
console.log(status.state);
const status = Deno.permissions.querySync({ name: "read", path: "/etc" });
console.log(status.state);
Отзыв
import { assert } from "jsr:@std/assert";
const status = await Deno.permissions.revoke({ name: "run" });
assert(status.state !== "granted")
import { assert } from "jsr:@std/assert";
const status = Deno.permissions.revokeSync({ name: "run" });
assert(status.state !== "granted")
Запрос
const status = await Deno.permissions.request({ name: "env" });
if (status.state === "granted") {
console.log("'env' permission is granted.");
} else {
console.log("'env' permission is denied.");
}
const status = Deno.permissions.requestSync({ name: "env" });
if (status.state === "granted") {
console.log("'env' permission is granted.");
} else {
console.log("'env' permission is denied.");
}
Тип
© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/api/deno/permissions