Как проверить, имеет ли пользователь Windows права на чтение и запись для определенной папки, используя node.js? - PullRequest
2 голосов
/ 30 октября 2019

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

Проблема возникает ТОЛЬКО на машинах с Windows. Кажется, что fs.accessSync(path, fs.constants.R_OK | fs.constants.W_OK) работает по-разному для систем posix и win32. В Windows он никогда не выдаст ошибку, если каталог существует, даже если у пользователя нет необходимых разрешений для записи в эту папку. На macOS выдает ошибку просто отлично.

fs.accessSync(pathToADirectoryWithWriteRestrictions, fs.constants.W_OK);
// undefined on windows. Indicating that path is accessible as per docs;
// throws an error on mac

Ожидается: fs.accessSync выдаст ошибку EPERM, сказав, что у пользователя нет необходимых разрешений для записи в этот каталог.

Другой вариант, который я пробовал - получать статистику каталога с помощьюfs.statSync, преобразовав его свойство mode в восьмеричную систему счисления, чтобы получить Unix-подобные номера разрешений.

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

// getting directory stats
const directoryStats = fs.statSync(pathToDirectory);
const statsMode = directoryStats.mode; // 16822

// converting directory stats mode to the Octal numeral system
// to get unix-like permission numbers

const unixLikePermissions = '0' + (directoryStats.mode & parseInt('777', 8)).toString(8);
console.log(unixLikePermissions) // 0666

Есть ли другой способ проверить, обладает ли пользователь всеми необходимыми правами для работы с определенным каталогом, используя node.js? Я что-то упустил?

...