2012-08-02 5 views
18

In Node il metodo fs.stat restituisce un diritto all'oggetto fs.Stats e posso ottenere il permesso di file tramite la proprietà fs.Stats.mode.Nodejs File Permissions

Ecco una vera e propria uscita da entrambi nodo e le coperture per le stesse directory:

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

ho bisogno di sapere come analizzare il numero fs.Stats.mode per ottenere le autorizzazioni.

risposta

Il numero è nel sistema di numerico ottale, dopo la conversione in decimali si presenta così:

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

E la conversione da ottale a sistema decimale è come questo:

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

Grande tutorial sui permessi dei file in linux - https://www.linux.com/learn/understanding-linux-file-permissions

+0

Purtroppo tuxfiles.org sembra essere andato ora –

+1

appena aggiornato il link. Speriamo che rimarrà più a lungo. – simo

+0

Per 'rwx' può fare' stat.mode & 0o777'. Se è la stringa che vuoi, allora fai '(stat.mode & 0o777) .toString (8)'. –

risposta

1

Il formato numerico dipende dalla piattaforma, quindi non è possibile, in modo affidabile.

Quando NodeJs inizia a esporre la funzione sottostante S_ISDIR e la S_IRUSR e costanti simili, è possibile.

Alcune informazioni sul formato stat: http://linux.die.net/man/2/stat

+0

Lo so, ma per ora volevo ottenere i permessi solo per il sistema linux. Di nuovo la pagina man in diversi stili - 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

Perché Node-FileUtils non supporta il gruppo e altre autorizzazioni – simo

+0

Perché ogni SO gestisce le autorizzazioni in un modo diverso, quindi preferisco supportare solo le autorizzazioni degli utenti. –

+0

Questo lavoro è multipiattaforma? –