How to test file permissions using node.js?

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...

Answers


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
});

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.


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.


Need Your Help

Using Swift Mailer AntiFlood Plugin or Throttler Plugin with Symfony 1.3

php symfony1

What is the syntax for the using Swift Mailer Plugins in Symfony 1.3?

How can I transform web.config values?

c# .net web-config app-config

I am trying to make different config files for different cases (debug,release, etc.) and I would like to change some settings for different builds.