Вопрос по file-permissions, node.js, file – Nodejs File Permissions

20

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

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

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 номер, чтобы получить разрешения.

Answer

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

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

Только что обновил ссылку. Надеюсь, это продлится дольше. simo
К сожалению, tuxfiles.org, похоже, уже нет Eric Majerus
Заrwx сможет сделатьstat.mode & 0o777, Если это строка, которую вы хотите, то выполните(stat.mode & 0o777).toString(8). Trevor Norris

Ваш Ответ

2   ответа
1

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

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

Я знаю это, но сейчас я хотел получить разрешения только для системы Linux. Снова справочная страница в другом стиле -kernel.org/doc/man-pages/online/pages/man2/stat.2.html simo
21
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():

canRead():

checkPermission (<path>, 4, cb);

canWrite():

checkPermission (<path>, 2, cb);
Почему Node-FileUtils не поддерживает группу поддержки и другие разрешения simo
Я попытался успешно в Windows и в OSX
Поскольку каждая ОС управляет разрешениями по-своему, поэтому я предпочитаю поддерживать только пользовательские разрешения.
Это работает кроссплатформенный?

Похожие вопросы