VB.Net 重置权限时,设置访问控制失败



我需要重置从我的 ASP.Net Web 窗体应用程序创建的文件夹的权限(这是一个旧项目(。我可以很好地创建文件夹,但是当我尝试重置刚刚创建的文件夹的权限时,出现错误"尝试执行未经授权的操作"。

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

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

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

我的失败代码如下。If 的第一部分工作正常,但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 运行。我也是远程服务器上文件夹的所有者。

可能最好的方法是将访问规则添加到DirectoryInfo的对象DirectorySecurity(在您的案例目录中属性(

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

您的 else 语句可能如下所示。

Dim directoryProperties As System.IO.DirectoryInfo = New DirectoryInfo("C:\sers\xxxx\")
'Get a DirectorySecurity object that represents the current security settings.
Dim dSecurity As DirectorySecurity = directoryProperties.GetAccessControl()
'Add the FileSystemAccessRule to the security settings. 
dSecurity.AddAccessRule(New FileSystemAccessRule("DOMAINUser Group", FileSystemRights.FullControl, AccessControlType.Allow))
'Set the new access settings.
directoryProperties.SetAccessControl(dSecurity)

也请查看下面的文档..

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

我添加了代码来在 Else 块中模拟自己。

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

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

卡塔玛拉尤杜,谢谢你的帮助。

最新更新