提前抱歉这个长问题。我真正感兴趣的是一种以编程方式检查正在执行的 Windows 身份是否具有足够的 Windows 权限来写入 ASP.NET Web 服务应用程序中的目录(或文件)的方法。但我将满足于为用户检索给定目录或文件的有效删除(修改)权限。问题是我希望能够做到这一点,而无需编写临时文件或不必执行 IO 操作并处理异常。
是的,已经有一个问题了(请参阅如何以编程方式确定我是否有在 .Net 中使用 C# 的写入权限?)通常我会同意接受的答案,即最好的方法是尝试 IO 操作并处理任何异常——System.IO 方法确实会抛出 System.UnauthorizedAccessException 以指示由于特权拒绝而导致的失败。但是在上传文件的情况下,我真的很想在浪费上传数据的时间和资源之前检查权限,因为只有在上传之后我们才能尝试写入有问题的文件或文件夹。我很遗憾任何通过 http 上传 2GB 文件的用户在上传完成后才被告知他们无权将文件上传到目的地。
如果您不想执行实际写入,测试写入访问的常用方法是写入一个临时文件。另一个问题有一个答案指出了这一点。这就是我们的代码当前所做的。但是 Windows 安全性允许写入访问权限而没有删除权限。只有写入权限但没有删除权限的用户最终会留下各种未删除的 .tmp 文件。不,我们不想使用域管理员帐户来重置 tmp 文件上的 ACL,然后删除它们。我一直采用的方法是使用 System.IO.Directory.GetAccessControl(..) 或 System.IO.File.GetAccessControl(..) 检查用户是否具有写入权限,并处理各种访问规则和 ACE 返回...但是有了这个我仍然有处理有效权限的问题——即在大多数情况下我还必须查找用户' s ACE 中列出的任何组的成员资格,这些组对对象具有权限。必须有一个更简单的方法......不是吗?