2012-08-02 54 views
18

ノードでは、fs.statメソッドはfs.Statsオブジェクトを返します。ファイルのパーミッションはfs.Stats.modeプロパティから取得できます。Nodejsファイルのパーミッション

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 --- --- 

と小数システムへの進からconvertionをこのようなものです:

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

linuxでのファイルアクセス許可に関する素晴らしいチュートリアル - https://www.linux.com/learn/understanding-linux-file-permissions

+0

は残念ながらtuxfiles.orgは –

+1

ちょうどリンクを更新し、今行っているように見えます。うまくいけば、これはもっと長く続くでしょう。 – simo

+0

'rwx'は' stat.mode&0o777'を実行できます。それがあなたがしたい文字列なら '(stat.mode&0o777).toString(8)'を実行します。 –

答えて

1

数値形式はプラットフォームに依存しているため、確実にはできません。

NodeJsが基礎となるS_ISDIR関数とS_IRUSRなどの定数の公開を開始すると、次のことができます。

スタットフォーマットに関するいくつかの情報:http://linux.die.net/man/2/stat

+0

私はそれを知っていますが、今のところ私はlinuxシステムのためだけに許可を得たいと思っていました。さまざまなスタイリングのマニュアルページ - http://www.kernel.org/doc/man-pages/online/pages/man2/stat.2.html – simo

20
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); 
+0

なぜNode-FileUtilsはグループや他の権限をサポートしていないのですか – simo

+0

すべてのOSが異なる方法で権限を管理しているので、私はユーザー権限だけをサポートする方が好きです。 –

+0

これはプラットフォーム間で動作しますか? –

関連する問題