2012-08-02 53 views
18

Trong nút, phương thức fs.stat trả về một đối tượng fs.Stats và tôi có thể nhận được quyền đối với tệp thông qua thuộc tính fs.Stats.mode.Quyền đối với tệp Nodejs

Đây là một sản lượng thực tế từ cả hai nút và vỏ cho các thư mục giống nhau:

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

tôi cần phải biết làm thế nào để phân tích số fs.Stats.mode để nhận các quyền.

trả lời

Số là trong hệ thống số bát phân, sau khi chuyển đổi để thập phân như sau:

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

Và chuyển đổi từ bát phân để hệ thống thập phân là như thế này:

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

Hướng dẫn tuyệt vời về quyền đối với tệp trong linux - https://www.linux.com/learn/understanding-linux-file-permissions

+0

Thật không may tuxfiles.org dường như biến mất –

+1

Chỉ cần cập nhật liên kết. Hy vọng rằng điều này sẽ ở lại lâu hơn. – simo

+0

Đối với 'rwx' có thể làm' stat.mode & 0o777'. Nếu đó là chuỗi bạn muốn thì hãy làm '(stat.mode & 0o777) .toString (8)'. –

Trả lời

1

Định dạng số là nền tảng phụ thuộc, vì vậy bạn không thể, đáng tin cậy.

Khi NodeJ bắt đầu hiển thị hàm S_ISDIR cơ bản và số S_IRUSR và các hằng số tương tự, bạn có thể.

Một số thông tin về định dạng stat: http://linux.die.net/man/2/stat

+0

Tôi biết rằng, nhưng bây giờ tôi muốn nhận được các điều khoản chỉ cho hệ thống Linux. Một lần nữa trang người đàn ông trong kiểu dáng khác nhau - 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

Tại sao Node-FileUtils không hỗ trợ nhóm và các quyền khác – simo

+0

Vì mọi hệ điều hành đều quản lý các quyền theo một cách khác, vì vậy tôi chỉ muốn hỗ trợ quyền của người dùng. –

+0

Nền tảng này có hoạt động không? –

Các vấn đề liên quan