我如何以编程方式检查.NET中的有效删除(修改)或写入权限?
作者:互联网
抱歉,很长的问题.
我真正感兴趣的是一种以编程方式检查执行中的Windows身份是否具有足够的Windows特权以写入ASP.NET Web服务应用程序中的目录(或文件)的方法.但是我将为给定目录或文件的用户检索有效的删除(修改)特权.问题是我希望能够做到这一点,而不必编写临时文件,也不必执行IO操作和处理异常.
是的,已经对此有一个疑问(请参阅How can I programmatically determine if I have write privileges using C# in .Net?)
通常,我会同意一个公认的答案,那就是最好的方法是仅尝试IO操作并处理任何异常-System.IO方法会抛出System.UnauthorizedAccessException以指示由于特权被拒绝而导致的失败.但是对于UPLOADING文件,我真的很想检查特权,然后再浪费时间和资源来上传数据,因为只有在上传之后我们才可以尝试写入有问题的文件或文件夹.我很遗憾所有通过http上传2GB文件的用户只能在上传完成后被告知他们没有将文件上传到目标位置的权限.
如果您不想执行实际的写操作,则测试写访问权限的通常方法是写一个临时文件.另一个问题有一个答案指出了这一点.这就是我们的代码当前正在执行的操作.但是Windows安全性允许没有删除权限的写访问.只有写访问权限但没有删除权限的用户最终会留下各种未删除的.tmp文件.不,我们不想使用域管理员帐户来重置tmp文件上的ACL,然后将其删除.我一直在使用的方法是使用System.IO.Directory.GetAccessControl(..)或System.IO.File.GetAccessControl(..)检查用户是否具有写特权,并处理各种访问规则和ACE返回…但是与此相关的是,我仍然在处理有效特权方面存在问题-即,在大多数情况下,我还必须在ACE中列出的对对象具有权限的任何组中查找用户的成员身份.必须有一种更简单的方法….不是吗?
解决方法:
很好地赞扬了用户体验,并试图维护干净的程序结构.也许如果您仅上传文件,则可以尝试创建一个与最终2GB文件具有相同名称的空“占位符”文件,然后将其覆盖.这并不完美,因为您仍然可以得到一个空文件,但是非常简单,并且至少比某些替代方法更优雅.
标签:file-permissions,asp-net,c 来源: https://codeday.me/bug/20191108/2004657.html