3

提前抱歉这个长问题。我真正感兴趣的是一种以编程方式检查正在执行的 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 中列出的任何组的成员资格,这些组对对象具有权限。必须有一个更简单的方法......不是吗?

4

2 回答 2

3

非常感谢在用户体验方面付出了更多努力并试图保持干净的程序结构。也许如果您只上传,您可以尝试创建一个与最终 2GB 文件同名的空“占位符”文件,然后覆盖它。不完美,因为你仍然可以得到一个空文件,但很容易,至少比一些替代品更优雅一点。

于 2008-12-15T18:41:14.013 回答
1

您还可以拥有永久文件,例如“access_test.txt”,您尝试用日期戳或其他内容覆盖该文件以首先测试当前访问。

于 2008-12-15T20:42:38.417 回答