我正在寻找为Node中的项目创建基于权限的插件系统。为了便于编写,以及其他原因,我想允许自己用以下内容调用插件:
var plugin = require('plugin');
这是诀窍,我想强制plugin
使用我的权限api系统,但我希望插件编写者能够执行以下操作:
var library = require('library');
这需要的是能够创建我自己的require()
方法,并将其传递给插件/模块,以便他们使用我的方法而无需更多工作。我的方法(原始)会这样工作:
function myRequire (module) {
if(meetsPermissions) return require(module);
throw 'You don't have the necessary permissions;
}
这在Node中是否可行?
答案 0 :(得分:2)
您可以在require.extensions
中覆盖默认加载器。但是,不推荐使用 ,因此可能会随时从Node.js中删除它。
例如:
var jsloader = require.extensions['.js'];
require.extensions['.js'] = function(module, filename) {
if (meetsPermissions(module)) return jsloader.apply(this, arguments);
throw new Error("You don't have the necessary permissions");
};
一些警告(除了弃用之外):
meetsPermissions()
应该相对较快util
,http
等)另一种可能的解决方案是使用vm
模块在沙箱中运行所有代码。有许多更高级别的模块可以提供此功能,例如node-sandboxed-module
。