Подтвердить что ты не робот

Разрешения для файлов Nodejs

В Node метод fs.stat возвращает объект fs.Stats, и я могу получить разрешение файла через свойство fs.Stats.mode.

Вот реальный вывод из Node и оболочки для тех же каталогов:

node  shell
17407 d rwx rwx rwt
16877 d rwx r-x r-x
16749 d r-x r-x r-x
16832 d rwx --- ---

Мне нужно знать, как разбирать номер fs.Stats.mode, чтобы получить разрешения.

Ответ

Число находится в восьмеричной числовой системе, после преобразования в десятичную строку выглядит следующим образом:

17407 41777 d rwx rwx rwt
16877 40755 d rwx r-x r-x
16749 40555 d r-x r-x r-x
16832 40777 d rwx --- ---

И переход от восьмеричной к десятичной системе выглядит следующим образом:

parseInt(stat.mode.toString(8), 10)

Отличное руководство по разрешению файлов в Linux - https://www.linux.com/learn/understanding-linux-file-permissions

4b9b3361

Ответ 1

var checkPermission = function (file, mask, cb){
    fs.stat (file, function (error, stats){
        if (error){
            cb (error, false);
        }else{
            cb (null, !!(mask & parseInt ((stats.mode & parseInt ("777", 8)).toString (8)[0])));
        }
    });
};

CanExecute():

checkPermission (<path>, 1, cb);

CanRead():

checkPermission (<path>, 4, cb);

canWrite():

checkPermission (<path>, 2, cb);

Ответ 2

Формат числа зависит от платформы, поэтому вы не можете надежно.

Когда NodeJs начинает раскрывать базовую функцию S_ISDIR и S_IRUSR и аналогичные константы, вы можете.

Некоторая информация о формате стата: http://linux.die.net/man/2/stat