2012-08-02 12 views
18

En el nodo, el método fs.stat devuelve un objeto fs.Stats, y puedo obtener el permiso del archivo a través de la propiedad fs.Stats.mode.Nodejs File Permissions

Aquí es una verdadera salida de ambos nodos y la cáscara de los mismos directorios:

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

Necesito saber cómo analizar el número fs.Stats.mode para obtener los permisos.

respuesta

El número se encuentra en el sistema numérico octal, después de convertir a decimal se parece a esto:

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

Y la conversión de octal en sistema decimal es así:

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

Gran tutorial sobre permisos de archivos en linux - https://www.linux.com/learn/understanding-linux-file-permissions

+0

Desafortunadamente tuxfiles.org parece haber desaparecido ahora –

+1

acaba de actualizar el enlace. Espero que esto se quede más tiempo. – simo

+0

Para 'rwx' puede hacer' stat.mode & 0o777'. Si es la cadena que desea, haga '(stat.mode & 0o777) .toString (8)'. –

Respuesta

1

El formato de número depende de la plataforma, por lo que no puede, de manera confiable.

Cuando NodeJs comienza a exponer la función subyacente S_ISDIR y S_IRUSR y constantes similares, puede hacerlo.

Parte de la información en el formato de dato: http://linux.die.net/man/2/stat

+0

Lo sé, pero por ahora quería obtener los permisos solo para el sistema Linux. De nuevo, la página del manual con un estilo diferente: 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

Por qué Node-FileUtils no admite el grupo y otros permisos – simo

+0

Porque cada SO gestiona los permisos de una manera diferente, por lo que prefiero solo admitir permisos de usuario. –

+0

¿Funciona esto a través de la plataforma? –