权限管理
在某些情况下,根据授予进程的权限状态,我们希望执行不同的操作。通过 Deno 权限 API 可以轻松实现这一点。
在最简单的示例中,我们可以通过其名称请求权限。在本例中,我们请求 --allow-env 并提示用户。如果过去已允许并且未撤销,则不会提示用户。
let status = await Deno.permissions.request({ name: "env" });
if (status.state === "granted") {
console.log("'env' permission is granted.");
} else {
console.log("'env' permission is denied.");
}
所有权限 API 也有同步版本
status = Deno.permissions.requestSync({ name: "env" });
if (status.state === "granted") {
console.log("'env' permission is granted.");
} else {
console.log("'env' permission is denied.");
}
我们也可以在不请求的情况下查询权限。在本例中,我们查询是否具有读取权限。不仅可以查询我们是否拥有某项权限,甚至可以使用 path 选项指定我们拥有权限的目录。
const readStatus = await Deno.permissions.query({
name: "read",
path: "/etc",
});
console.log(readStatus.state);
如果我们不再需要某项权限,也可以撤销进程对此权限的访问。当进程开始运行不受信任的代码时,这很有用。
import { assert } from "jsr:@std/assert";
const runStatus = await Deno.permissions.revoke({ name: "run" });
assert(runStatus.state !== "granted");
使用 Deno CLI 在本地运行 此示例
deno run https://docs.deno.org.cn/examples/permissions.ts