2012-08-02 10 views
18

W węźle metoda fs.stat zwraca prawo obiektu fs.Stats i mogę uzyskać uprawnienie do pliku za pośrednictwem właściwości fs.Stats.mode.Plik Nodejs Uprawnienia

Oto prawdziwa moc zarówno od węzła i powłoki dla tych samych katalogach:

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

muszę umieć analizować liczbę fs.Stats.mode aby uzyskać uprawnienia.

Odpowiedź

Numer jest w ósemkowej systemu liczbowego, po konwersji do przecinku wygląda następująco:

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

a konwersja z ósemkowym do systemu dziesiętnego jest tak:

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

Świetny samouczek dotyczący uprawnień do plików w systemie Linux - https://www.linux.com/learn/understanding-linux-file-permissions

+0

Niestety tuxfiles.org wydaje się być już teraz –

+1

Wystarczy aktualizowany link. Mam nadzieję, że to pozostanie dłużej. – simo

+0

Dla 'rwx' można zrobić' stat.mode & 0o777'. Jeśli jest to łańcuch, który chcesz, to wykonaj '(stat.mode & 0o777) .toString (8)'. –

Odpowiedz

1

Format liczb jest zależny od platformy, więc nie można, niezawodnie.

Kiedy NodeJs rozpoczyna ekspozycję podstawowej funkcji S_ISDIR i S_IRUSR i podobnych stałych, możesz.

Niektóre informacje o formacie stat: http://linux.die.net/man/2/stat

+0

Wiem, że na razie chciałem uzyskać uprawnienia tylko dla systemu Linux. Znowu strona podręcznika w innym stylu - 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

Dlaczego Node-FileUtils nie obsługuje uprawnień grupowych i innych – simo

+0

Ponieważ każdy system operacyjny zarządza uprawnieniami w inny sposób, więc wolę wspierać tylko uprawnienia użytkowników. –

+0

Czy to działa na platformie? –