2013-05-22 98 views

回答

3

首先,你通常應該問一個功能性問題(你想達到什麼目的),以得到一個有用的答案。你問到我一個實現/技術細節,因此我可能是無用的技術答案:的* nix的權限

SftpATTRS.getPermissions()返回數值表示:
https://en.wikipedia.org/wiki/File_system_permissions#Numeric_notation

這是對自己沒有足夠的判斷,如果當前用戶擁有讀取文件的權限。此外,您必須知道:誰是文件的所有者(getUId返回所有者ID,但SFTP中沒有用於將用戶名映射到/從用戶名映射的API)以及什麼是文件組(getGId,相同) 。

所以你只能確保用戶可以讀取文件,當每個人都有權限這樣做。您可以通過標記0004(讀取其他課程的權限)來了解情況。但缺少標誌並不意味着用戶不能讀取該文件,例如如果用戶是文件的所有者並且有標誌0400(讀取所有者類的權限)。

另外請注意,當遠程系統不是* nix(例如它是Windows)時,getPermissions()的值通常無關緊要。

非平凡的,但唯一可靠的方法是挖掘JSch源代碼並提取新API以打開文件以供閱讀。然後,您可以嘗試打開文件(您不必實際讀取任何內容)以告知用戶是否有權這樣做。

+0

我正在編寫一個程序,向您顯示服務器上的可用存儲庫,並允許您下載所選內容。有些目錄不是hg存儲庫。我需要查看每個目錄以檢查是否存在「.hg」目錄。問題是我沒有查看所有目錄的權限,我得到「權限被拒絕」。這就是爲什麼我需要檢查一下,如果我可以進去,如果沒有 - 跳過。 –

+0

那麼,「權限被拒絕」是您尋找的指示。趕上例外,你很好。 –