Deno 是一个新的运行时环境,用于在浏览器外运行 JavaScript 和 TypeScript。然而,与其他运行时环境不同的是,Deno 为每个运行的程序提供了一组默认的权限,这些权限可用于控制程序的访问硬件和文件系统等资源。在本文中,我们将详细介绍 Deno 进行权限管理的方法和技巧。
Deno 权限模型
Deno 的权限模型基于 Unix 操作系统上的文件权限模型。每个 Deno 程序都有一个“资源访问列表”,包含它可以访问的所有资源。这个列表是在运行时根据程序代码和命令行参数构建的。
默认情况下,Deno 的所有权限都是关闭的。如果没有在命令行上明确请求权限,则程序将无法访问系统资源。
Deno 的权限模型很好地平衡了安全和灵活性之间的关系。因为它允许程序访问所有的资源,但需要明确请求访问权限。这使得程序的作者可以正确地平衡安全和灵活性之间的需求。
Deno 的权限类型
Deno 默认提供了五种权限类型:
- net
- read
- write
- run
- env
net
net 权限控制程序访问网络资源的能力。在默认情况下,Deno 程序无法访问网络资源。如果需要访问网络资源,需要使用 --allow-net 命令行参数:
deno run --allow-net app.ts
这将允许程序访问所有的网络资源。
read
read 权限控制程序访问文件系统的能力。在默认情况下,Deno 程序无法访问文件系统。如果需要访问文件系统,需要使用 --allow-read 命令行参数:
deno run --allow-read app.ts
这将允许程序访问所有的文件系统资源。
write
write 权限控制程序写入文件系统的能力。在默认情况下,Deno 程序无法写入文件系统。如果需要写入文件系统,需要使用 --allow-write 命令行参数:
deno run --allow-write app.ts
这将允许程序写入所有的文件系统资源。
run
run 权限控制程序执行其他程序的能力。在默认情况下,Deno 程序无法执行其他程序。如果需要执行其他程序,需要使用 --allow-run 命令行参数:
deno run --allow-run app.ts
这将允许程序执行所有的其他程序。
env
env 权限控制程序访问环境变量的能力。在默认情况下,Deno 程序无法访问环境变量。如果需要访问环境变量,需要使用 --allow-env 命令行参数:
deno run --allow-env app.ts
这将允许程序访问所有的环境变量。
具体的 Deno 权限管理
如果需要更细粒度地控制 Deno 程序的访问权限,则可以使用下面的方法。
检查权限
Deno 允许您检查当前程序的权限状态。在程序中,可以使用 Deno.permissions 查询权限:
const status = await Deno.permissions.query({ name: "read" }); if (status.state === "granted") { console.log("read permission granted"); } else { console.log("read permission denied"); }
请求权限
如果程序需要访问某个资源,则可以使用 Deno.permissions.request 方法请求访问权限:
const status = await Deno.permissions.request({ name: "read" }); if (status.state === "granted") { console.log("read permission granted"); } else { console.log("read permission denied"); }
撤销权限
如果程序不再需要访问某些权限,则可以使用 Deno.permissions.revoke 方法撤销访问权限:
await Deno.permissions.revoke({ name: "read" });
示例代码
下面是一个例子,展示了如何在 Deno 中实现权限管理:
-- -------------------- ---- ------- ----- -------- ------ - ----- ------ - ----- ------------------------ ----- ----- --- -- ------------- --- ---------- - ---------------- ---- -- ----- --- ------------- ----- -------------------------- ----- ----- --- - ----- ------- - ---------- ---- ------ ------- ------- ------- ------- ------- --- ----- ----------------- ---------------- - -------
在这个例子中,程序使用了 Deno 的 run 权限执行了一个 ls -lh 的命令。程序权限的检查和请求是在程序运行时动态进行的。
总结
本文介绍了 Deno 的权限模型和权限类型,并展示了如何实现更细粒度的权限控制。在您的下一个 Deno 项目中,使用这些技巧帮助平衡安全和灵活性之间的需求。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f141b8f6b2d6eab3b1738d