How to test file permissions using node.js?

2019-06-20 17:31发布

How can I check to see the permissions (read/write/execute) that a running node.js process has on a given file?

I was hoping that the fs.Stats object had some information about permissions but I don't see any. Is there some built-in function that will allow me to do such checks? For example:

var filename = '/path/to/some/file';
if (fs.canRead(filename)) // OK...
if (fs.canWrite(filename)) // OK...
if (fs.canExecute(filename)) // OK...

Surely I don't have to attempt to open the file in each of those modes and handle an error as the negative affirmation, right? There's got to be a simpler way...

3条回答
仙女界的扛把子
2楼-- · 2019-06-20 18:02

Checking readability is not so straightforward as languages like PHP make it look by abstracting it in a single library function. A file might be readable to everyone, or only to its group, or only to its owner; if it is not readble to everybody, you will need to check if you are actually a member of the group, or if you are the owner of the file. It is usually much easier and faster (not only to write the code, but also to execute the checks) to try to open the file and handle the error.

查看更多
孤傲高冷的网名
3楼-- · 2019-06-20 18:07

I am late, but, I was looking for same reasons as yours and learnt about this.

fs.access is the one you need. It is available from node v0.11.15.

function canWrite(path, callback) {
  fs.access(path, fs.W_OK, function(err) {
    callback(null, !err);
  });
}

canWrite('/some/file/or/folder', function(err, isWritable) {
  console.log(isWritable); // true or false
});
查看更多
We Are One
4楼-- · 2019-06-20 18:18

How about using a child process?

var cp = require('child_process');

cp.exec('ls -l', function(e, stdout, stderr) {
  if(!e) {
    console.log(stdout);
    console.log(stderr);
    // process the resulting string and check for permission
  }
});

Not sure though if process and *child_process* share the same permissions.

查看更多
登录 后发表回答