重置权限时,VB.Net SetAccessControl失败

时间:2017-08-24 16:40:09

标签: asp.net vb.net directory file-permissions

我需要重置从我的ASP.Net Web表单应用程序创建的文件夹的权限(这是一个遗留项目)。我可以创建文件夹,但是当我尝试重置刚刚创建的文件夹的权限时,我收到错误“尝试执行未经授权的操作。”

当我创建安全规则时,我使用以下代码:

securityRules.AddAccessRule(New FileSystemAccessRule("DOMAIN\User Group", FileSystemRights.FullControl, InheritanceFlags.None, PropagationFlags.InheritOnly, AccessControlType.Allow))

它封装在一个名为GetSecurity(proj As Project)的函数中,它返回一个DirectorySecurity对象。

我的失败代码如下。 I f的第一部分工作正常,但 Else 部分失败。

Dim projectPath = fullPath + "\" + finalFolder
If Not My.Computer.FileSystem.DirectoryExists(projectPath ) Then
    Dim directoryProperties As System.IO.DirectoryInfo = 
    Directory.CreateDirectory(projectPath, GetSecurity(proj))
Else
    Dim directoryProperties As System.IO.DirectoryInfo = New DirectoryInfo(projectPath)
    directoryProperties.SetAccessControl(GetProposalSecurity(proj))
End If

我确保将自己添加到函数中的文件夹中,因为它在本地计算机上作为IIS运行。我也是远程服务器上文件夹的所有者。

2 个答案:

答案 0 :(得分:0)

可能最好的方法是将访问规则添加到DirectorySecurity的{​​{1}}对象(在您的情况下为 directoryProperties

然后通过添加新规则将DirectoryInfo对象设置为目录信息对象的DirectorySecurity

你的其他声明可能如下所示..

SetAccessControl

请查看以下文档..

https://docs.microsoft.com/en-us/dotnet/api/system.io.directoryinfo.setaccesscontrol?view=netframework-4.7#System_IO_DirectoryInfo_SetAccessControl_System_Security_AccessControl_DirectorySecurity_

答案 1 :(得分:0)

我添加了代码以在Else块中冒充自己。

https://nujakcities.wordpress.com/2011/08/01/use-vb-net-to-impersonate-a-domain-user/

工作正常。它不是一个完美的解决方案,但由于我用MVC应用程序替换整个应用程序来做同样的事情,我并不过分担心。

katamarayudu,感谢您的帮助。