2013-05-22 66 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

那么,“权限被拒绝”是您寻找的指示。赶上例外,你很好。 –