TL;DR
在testing/fstest.TestFS
中,如果文件的fs.FileMode
表示某些用户不允许读取目录,那么ReadDir
返回ErrPermission
是可以接受的。
上下文
在使用io/fs.FS
时,无法选择在读取文件时应用哪些权限位(fs.FileMode
)。因此,fstest.TestFS无法强制执行给定基于用户/组/其他权限位的FileMode的文件/目录,应该触发还是不触发Open
、ReadFile
或ReadDir
。
目前,任何错误(包括ErrPermission
)在ReadDir
上都始终被视为错误。然而,如果文件系统强制执行fs.FileMode
并且目录具有读权限位关闭,则返回fs.ErrPermission
是正确的行为。
建议
我建议在ReadDir
上忽略ErrPermission
,如果至少有一个读权限位未设置:如果 mode & 0444 != 0444
,则忽略 ErrPermission
(并静默跳过其他 ReadDir
检查)。
影响
此更改只会减少一些返回的错误,永远不会引发更多的错误,因此保留了向后兼容性。
4条答案
按热度按时间fnvucqvd1#
Cc: @bcmills
50few1ms2#
权限位并非普遍支持;如果
TestFS
应该忽略在没有 Unix 读取权限的情况下打开文件的权限错误,那么它是否应该忽略在 ACL 禁止访问的情况下打开 Windows 文件的权限错误?1bqhqjot3#
请允许我请教您对此的看法(因为您是#46776以及各种io/fs.FS实现的作者)?
wsewodh24#
@neild
fs.FileMode
的文档提到:最低的九位是标准的Unix rwxrwxrwx权限。这些位的值应被视为公共API的一部分,并可用于线协议或磁盘表示中。