2012-06-18 2 views
4

Как я могу проверить разрешения (чтение/запись/выполнение), что выполняемый процесс node.js имеет заданный файл?Как проверить права доступа к файлам с помощью node.js?

Я надеялся, что у fs.Stats object была некоторая информация о разрешениях, но я их не вижу. Есть ли встроенная функция, которая позволит мне делать такие проверки? Например:

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

Конечно, я не должен пытаться открыть файл в каждом из этих режимов и обрабатывать ошибки в качестве отрицательного утверждения, не так ли? Там должен быть более простой способ ...

+0

Я думаю, что для этого нет функции api. – TheHippo

+0

На самом деле, просто идти вперед и пытаться открыть файл и обрабатывать любые возникающие ошибки, как правило, правильный подход. Вы проверяете, доступен ли файл, но он требует больше усилий (даже если он скрыт в основных библиотеках, работа по-прежнему выполняется). – lanzz

ответ

0

Проверка удобочитаемости не так проста, поскольку такие языки, как PHP, выглядят путем абстрагирования ее в одной библиотечной функции. Файл может быть доступен для всех или только для его группы или только для его владельца; если он не читается всем, вам нужно будет проверить, действительно ли вы являетесь членом группы, или если вы являетесь владельцем файла. Обычно это намного проще и быстрее (не только для написания кода, но и для выполнения проверок), чтобы попытаться открыть файл и обработать ошибку.

-2

Как насчет использования 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 
    } 
}); 

Не уверен, хотя, если процесс и * child_process * один и то же разрешение.

+1

Объекты 'fs.Stats' уже предоставляют свойство' mode', нет необходимости выполнять внешний процесс; кроме того, разрешения файла не изменяются магическим образом в зависимости от того, кто ищет – lanzz

+0

@lanzz, если процесс выполняется в другом пользовательском контексте, он будет иметь разные права в отношении доступа к файлам – Sebastian

6

Я опаздываю, но я искал те же причины, что и ваши, и узнал об этом.

fs.access - это тот, который вам нужен. Он доступен из узла 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 
}); 
Смежные вопросы