2012-08-02 147 views
18

在Node中,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 --- --- 

而且从八到十进位制的皈依是这样的:

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

linux上的文件权限教程 - https://www.linux.com/learn/understanding-linux-file-permissions

+0

不幸的是tuxfiles.org似乎消失了,现在 – 2016-05-07 02:25:51

+1

刚刚更新的链接。希望这会停留更长时间。 – simo 2016-05-07 08:10:35

+0

'rwx'可以做'stat.mode&0o777'。如果它是你想要的字符串,然后执行'(stat.mode&0o777).toString(8)'。 – 2016-12-28 20:28:15

回答

1

数字格式是平台相关的,所以你不能可靠。

当NodeJs开始暴露底层S_ISDIR函数和S_IRUSR和类似的常量时,您可以。

在STAT格式的一些信息:http://linux.die.net/man/2/stat

+0

我知道,但现在我想只获得Linux系统的权限。同样,不同样式的手册页 - http://www.kernel.org/doc/man-pages/online/pages/man2/stat.2.html – simo 2012-08-03 09:27:59

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 2012-08-03 09:22:27

+0

因为每个操作系统都以不同的方式管理权限,所以我更愿意只支持用户权限。 – 2012-08-03 10:08:27

+0

这个工作是否跨平台? – 2016-06-14 09:51:32