21

在Node中该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数字以获取权限。

回答

该数字采用八进制数字系统,转换为十进制后如下所示:

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

4

2 回答 2

22
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])));
        }
    });
};

可以执行()

checkPermission (<path>, 1, cb);

可以读取()

checkPermission (<path>, 4, cb);

可以写()

checkPermission (<path>, 2, cb);
于 2012-08-02T16:00:32.443 回答
1

数字格式取决于平台,因此您不能可靠。

当 NodeJs 开始公开底层S_ISDIR函数S_IRUSR和类似的常量时,你就可以了。

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

于 2012-08-02T11:33:14.023 回答