Spec-Zone.ru › Deno 2

Разрешения

Система разрешений контролирует доступ к ресурсам (например, к файловой системе, сети, переменным окружения).

Запрашивайте разрешения явно, повышая безопасность и доверие пользователей.

Например, 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);
querySync(desc: PermissionDescriptor): PermissionStatus

Возвращает текущий статус разрешения.

Обратите внимание: если разрешение уже предоставлено, 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.");
}
requestSync(desc: PermissionDescriptor): PermissionStatus

Запрашивает разрешение и возвращает его состояние.

Если разрешение уже предоставлено, пользователю не будет предложено предоставить его повторно.

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")
revokeSync(desc: PermissionDescriptor): PermissionStatus

Отзывает разрешение и возвращает его состояние.

import { assert } from "jsr:@std/assert";

const status = Deno.permissions.revokeSync({ name: "run" });
assert(status.state !== "granted")

класс Deno.PermissionStatus

наследует EventTarget

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 позволяет ограничить разрешение конкретной переменной среды.

Свойства

name: "env"
variable: string
необязательный

Необязательное имя переменной среды (например, PATH).


интерфейс Deno.FfiPermissionDescriptor

Дескриптор разрешения для разрешений allow-ffi и deny-ffi, определяющий доступ к загрузке внешнего кода и взаимодействию с ним через API внешнего интерфейса функций, доступный в Deno. Параметр path позволяет ограничить разрешение конкретным путём на хосте.

Свойства

name: "ffi"
path: string | URL
необязательный

Необязательный путь на локальном хосте, которым следует ограничить разрешение.


интерфейс 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, позволяет коду среды выполнения только пытаться читать данные; операционная система может применять дополнительные разрешения.

Свойства

name: "read"
path: string | URL
необязательный

Разрешение allow-read или deny-read можно ограничить конкретным путём (а если путь является каталогом — любыми вложенными путями).


интерфейс Deno.RunPermissionDescriptor

Дескриптор разрешения для разрешений allow-run и deny-run, определяющий, какие дочерние процессы могут выполняться в Deno. Параметр command позволяет ограничить разрешение конкретным исполняемым файлом.

Предупреждение: на практике allow-run фактически эквивалентно allow-all, поскольку вредоносный код может выполнить любой произвольный код на хосте.

Свойства

name: "run"
command: string | URL
необязательный

Разрешение allow-run или deny-run можно ограничить конкретным исполняемым файлом, путь к которому будет относительным к рабочему каталогу (CWD) Deno CLI на момент запуска.


интерфейс Deno.SysPermissionDescriptor

Дескриптор разрешения для разрешений allow-sys и deny-sys, определяющий доступ к конфиденциальным сведениям о хост-системе, которые вредоносный код может попытаться использовать. Параметр kind позволяет ограничить разрешение конкретным видом сведений.

Свойства

name: "sys"
kind:
"loadavg"
| "hostname"
| "systemMemoryInfo"
| "networkInterfaces"
| "osRelease"
| "osUptime"
| "uid"
| "gid"
| "username"
| "cpus"
| "homedir"
| "statfs"
| "getPriority"
| "setPriority"
| "ca"
| "umask"
необязательный

Конкретные сведения, к которым следует ограничить разрешение.


интерфейс Deno.WritePermissionDescriptor

Дескриптор разрешения для разрешений allow-write и deny-write, определяющий доступ к записи ресурсов на локальном хосте. Параметр path позволяет ограничить разрешение конкретным путём (а если путь является каталогом — любыми вложенными путями).

Разрешение, предоставленное с помощью allow-write, позволяет коду среды выполнения только пытаться записывать данные; операционная система может применять дополнительные разрешения.

Свойства

name: "write"
path: string | URL
необязательный

Разрешение allow-write или deny-write можно ограничить конкретным путём (а если путь является каталогом — любыми вложенными путями).


псевдоним типа Deno.PermissionDescriptor

Дескрипторы разрешений, определяющие разрешение и позволяющие запрашивать, получать или отзывать его.

Дополнительные сведения о каждом типе разрешения см. в описаниях отдельных дескрипторов.

Определение

RunPermissionDescriptor
| ReadPermissionDescriptor
| WritePermissionDescriptor
| NetPermissionDescriptor
| EnvPermissionDescriptor
| SysPermissionDescriptor
| FfiPermissionDescriptor
| ImportPermissionDescriptor

псевдоним типа Deno.PermissionName

Название привилегированной функции, для которой требуется разрешение.

Определение

"run"
| "read"
| "write"
| "net"
| "env"
| "sys"
| "ffi"

псевдоним типа Deno.PermissionOptions

Параметры, определяющие разрешения в контексте теста или рабочего процесса.

"inherit" гарантирует, что в контексте теста будут применены все разрешения родительского процесса. "none" гарантирует, что у контекста теста не будет разрешений. PermissionOptionsObject предоставляет контексту теста более конкретный набор разрешений.

Определение

"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.");
}

Тип

Permissions

© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/api/deno/permissions

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API