VB.Net 重置权限时 SetAccessControl 失败
VB.Net SetAccessControl fails when reseting permissions
我需要重置从我的 ASP.Net 网络表单应用程序(这是一个遗留项目)创建的文件夹的权限。我可以很好地创建文件夹,但是当我尝试重置刚刚创建的文件夹的权限时,出现错误 "Attempted to perform an unauthorized operation."
当我创建安全规则时,我使用以下代码:
securityRules.AddAccessRule(New FileSystemAccessRule("DOMAIN\User Group", FileSystemRights.FullControl, InheritanceFlags.None, PropagationFlags.InheritOnly, AccessControlType.Allow))
它封装在一个名为 GetSecurity(proj As Project) 的函数中,returns 一个 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
对象(在您的情况下 directoryProperties)
然后通过添加新规则将 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("DOMAIN\User Group", FileSystemRights.FullControl, AccessControlType.Allow))
'Set the new access settings.
directoryProperties.SetAccessControl(dSecurity)
也请查看以下文档..
我添加了代码以在 Else 块中模拟自己。
https://nujakcities.wordpress.com/2011/08/01/use-vb-net-to-impersonate-a-domain-user/
它工作正常。这不是一个完美的解决方案,但由于我用 MVC 应用程序替换了整个应用程序来执行相同的操作,所以我并不过分担心。
katamarayudu,感谢您的帮助。
我需要重置从我的 ASP.Net 网络表单应用程序(这是一个遗留项目)创建的文件夹的权限。我可以很好地创建文件夹,但是当我尝试重置刚刚创建的文件夹的权限时,出现错误 "Attempted to perform an unauthorized operation."
当我创建安全规则时,我使用以下代码:
securityRules.AddAccessRule(New FileSystemAccessRule("DOMAIN\User Group", FileSystemRights.FullControl, InheritanceFlags.None, PropagationFlags.InheritOnly, AccessControlType.Allow))
它封装在一个名为 GetSecurity(proj As Project) 的函数中,returns 一个 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
对象(在您的情况下 directoryProperties)
然后通过添加新规则将 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("DOMAIN\User Group", FileSystemRights.FullControl, AccessControlType.Allow))
'Set the new access settings.
directoryProperties.SetAccessControl(dSecurity)
也请查看以下文档..
我添加了代码以在 Else 块中模拟自己。
https://nujakcities.wordpress.com/2011/08/01/use-vb-net-to-impersonate-a-domain-user/
它工作正常。这不是一个完美的解决方案,但由于我用 MVC 应用程序替换了整个应用程序来执行相同的操作,所以我并不过分担心。
katamarayudu,感谢您的帮助。