11

実行中のnode.jsプロセスが特定のファイルに対して持っている権限(読み取り/書き込み/実行)を確認するにはどうすればよいですか?

fs.Statsオブジェクトに権限に関する情報が含まれていることを期待していましたが、何も表示されません。そのようなチェックを可能にする組み込み関数はありますか?例えば:

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

確かに、これらの各モードでファイルを開こうとして、エラーを否定的な肯定として処理する必要はありませんよね?もっと簡単な方法が必要です...

4

4 に答える 4

19

私は遅れていますが、あなたと同じ理由を探していて、これについて学びました。

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
});
于 2016-03-22T04:38:03.160 に答える
5

うまく言及されているfs.accessSync(path [、mode])があります:

パスで指定されたファイルまたはディレクトリに対するユーザーのアクセス許可を同期的にテストします。mode引数は、実行するアクセシビリティチェックを指定するオプションの整数です。モードの可能な値については、ファイルアクセス定数を確認してください。2つ以上の値のビットごとのORで構成されるマスクを作成することができます(例:fs.constants.W_OK | fs.constants.R_OK)。

アクセシビリティチェックのいずれかが失敗した場合、エラーがスローされます。それ以外の場合、メソッドはundefinedを返します。

埋め込み例:

try {
  fs.accessSync('etc/passwd', fs.constants.R_OK | fs.constants.W_OK);
  console.log('can read/write');
} catch (err) {
  console.error('no access!');
}
于 2020-05-02T11:48:25.373 に答える
1

PHPのような言語では、単一のライブラリ関数で抽象化することで読みやすさを確認できるため、読みやすさの確認はそれほど簡単ではありません。ファイルは、すべての人、そのグループのみ、またはその所有者のみが読み取ることができる場合があります。誰もが読めない場合は、実際にグループのメンバーであるかどうか、またはファイルの所有者であるかどうかを確認する必要があります。通常、ファイルを開いてエラーを処理する方がはるかに簡単で高速です(コードを記述するだけでなく、チェックを実行することもできます)。

于 2012-06-18T18:41:50.930 に答える
-4

子プロセスを使用するのはどうですか?

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*が同じ権限を共有しているかどうかはわかりません。

于 2012-06-18T19:30:24.397 に答える