VB.Net SetAccessControl在重置权限时失败
问题描述:
我需要重置从我的ASP.Net Web窗体应用程序(这是一个传统项目)创建的文件夹的权限。我可以创建文件夹,但是当我尝试重置刚刚创建的文件夹的权限时,出现错误“尝试执行未经授权的操作。”VB.Net SetAccessControl在重置权限时失败
当我创建安全规则,我用这个代码:
securityRules.AddAccessRule(New FileSystemAccessRule("DOMAIN\User Group", FileSystemRights.FullControl, InheritanceFlags.None, PropagationFlags.InheritOnly, AccessControlType.Allow))
它封装了一个名为GetSecurity(PROJ作为项目)函数中返回一个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身份运行。我也是远程服务器上文件夹的所有者。
答
我添加代码来冒充自己else块内。
https://nujakcities.wordpress.com/2011/08/01/use-vb-net-to-impersonate-a-domain-user/
它工作正常。这不是一个完美的解决方案,但是由于我用MVC应用程序替换了整个应用程序来做同样的事情,所以我并不过分担心。
katamarayudu,谢谢你的帮助。
答
也许最好的方法是将访问规则添加到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)
查找到下面的文件太..
我想完全替换文件夹上的当前访问规则。我发现,如果我手动设置适用于“此文件夹,子文件夹和文件”的权限,我可以使用上面的代码重置权限。有没有办法在访问规则上设置“适用于”? –
尝试使用“inheritanceFlags”和“propagationFlags”。设置InheritanceFlags.ContainerInherit,PropagationFlags.InheritOnly。因此,“FileSystemAccessRule”构造函数看起来像...... FileSystemAccessRule(“DOMAIN \ User Group”,FileSystemRights.FullControl,InheritanceFlags.ContainerInherit,PropagationFlags.InheritOnly,AccessControlType.Allow) – Naidu
不幸的是,这不起作用。我确实注意到,当我把它看作服务器的域管理员时,目录上没有设置所有者。代码:FileSystemAccessRule(“DOMAIN \ User Group”,FileSystemRights.FullControl,InheritanceFlags.ContainerInherit,PropagationFlags.InheritOnly,AccessControlType.Allow) –