关于 Deno 的权限问题及解决方案

Deno 是一个基于 V8 引擎的 JavaScript/TypeScript 运行时,它与 Node.js 相比具有更高的安全性和更先进的模块机制。但是,如果你已经在使用 Deno 一段时间,你就会发现,Deno 的权限管理机制可能很困扰你。本文将深入讨论 Deno 的权限问题,并提供一些解决方案。

Deno 的权限机制

在 Deno 中,每个程序都是一个沙箱,程序被限制在只能访问指定的资源。Deno 程序要访问的资源可能包括网络、文件系统、环境变量等等。这些资源在 Deno 中被称为权限。

在 Deno 中,每个权限都有一个字符串来标识,例如访问文件系统的权限被标识为 "read" 和 "write"。Deno 运行时会将这些权限显式地传递给你的程序,你必须在程序中声明你需要哪些权限。

在程序中声明需要的权限有两种方式。第一种方式是在命令行参数中指定需要的权限。例如,以下命令将允许程序访问文件系统的读、写和网络权限:

- ---- --- ------------ ------------- ----------- ------

第二种方式是在程序中使用一个权限控制 API。例如,以下代码将请求读取一个文件的权限:

----- ---- - ----- --------------------- - ----- ---- ---

如果你尝试运行一个没有授权请求的权限的程序,你会看到 Deno 给出一个友好的错误信息,并告诉你需要哪些权限。

Deno 权限的问题

尽管 Deno 的权限机制是为了增强程序的安全性,但许多 Deno 用户都表示它们很难处理,特别是在编写大型程序时。以下是可能出现的问题:

  1. 忘记请求某些权限。当你编写一个程序时,你可能会忘记请求某些必要的权限。在运行时,Deno 将直接拒绝你的请求,并输出一个错误信息。但是,错误信息可能很抽象,难以找到问题。并且,当你尝试调用一个没有授权请求的权限的 API 时,即使出现错误,也可能不会有任何错误信息。

  2. 调用外部 API 时经常需要权限。当你使用 Deno 编写一个 HTTP 服务器或 Socket 服务器时,你需要访问网络权限和读/写权限。在每个调用外部 API 时都写上授权请求很麻烦。这使得程序的可读性和可维护性都降低了。

  3. 涉及多个权限的代码难以编写和维护。当你需要访问多个权限时,你必须在命令行参数或程序中分别编写每个权限。这很容易出错,并且可能会导致程序的复杂性增加。

解决方案

以下是一些解决 Deno 权限问题的方法:

1. 显式授权请求

尽管在程序中显式授权请求可能很繁琐,但它始终是最直接的解决方案。你可以在程序的顶部声明所有需要的权限:

----- ----------- - -
   ----- -----
   ------ -----
   ---- -----
--

----- ---- - ----- --------------------- -------------

如果你忘记授权任何权限,Deno 将在运行时告诉你。如果你还有任何问题,可以在错误信息中查找权限的名称。

2. 隐藏权限请求

如果你使用多个调用外部 API 的模块,你可能希望隐藏授权请求,以避免在每个调用的时候显式请求。

在 Deno 中,你可以使用 ~/.deno 目录中的配置文件来指定默认的权限。例如:

-- -----------------------
-
   ------- -----
   -------- -----
   ------ ----
-

在这个配置文件中,你可以指定默认的权限。这些默认的权限会自动应用于所有的程序,除非你在程序中显式地请求了更多的权限。

3. 权限添加器

为了使你的程序能够轻松地添加和删除权限,你可以编写一个权限添加器。这是一个小型的库,它把所有 Deno 权限组合在一起,让你能够轻松地添加和删除权限。

以下是一个简单的权限添加器的示例代码:

------ ---- ----------- - -------------- ---------

------ ----- --------------- -
   ------------ ------------

   ------------------------ ------------ -
      ---------------- - ------------
   -

   --------------- ------- -
      ---------------------------- - -----
   -

   ------------------ ------- -
      -- ----------- -- ----------------- -
         ------ -----------------------------
      -
   -

   ------- -
      ------ --------------------------------
         ------------------ ------- -- ---------------------------------
         ------- ---
   -
-

使用这个添加器,你可以轻松地添加和删除权限。例如:

----- ----------- - --- -----------------
   ----- -----
   ------ -----
   ---- -----
---

-- -------
-----------------------
----------------------------

-- -------
----- ------- - ----- --- ---------------------- --------

4. 适当的文件系统权限

考虑到文件系统访问的风险,Deno 默认情况下对于访问文件系统有很严格的限制。在使用 Deno 的时候,可能会感到很难受。在这种情况下,你可以为它指定一个适当的文件系统权限。

例如,如果你需要在 ./data 目录下进行一些读写操作,你可以使用以下命令来启动你的程序:

- ---- --- ------------------- -------------------- ------

这将允许你的程序在指定的目录下读写文件,同时避免了潜在的安全漏洞。

结论

Deno 的权限机制是一种增强程序安全性的好方法。但是,当它使程序更加复杂和难以维护时,这并不是一个好事。使用合适的工具和方法,你可以轻松地管理 Deno 的权限问题。在开发过程中,牢记 Deno 的正确使用方式可以使你的程序更加安全和可维护。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/671b5fbb9babaf620fab078e