2017-08-24 108 views
0

我需要重置从我的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身份运行。我也是远程服务器上文件夹的所有者。

回答

0

也许最好的方法是将访问规则添加到DirectoryInfoDirectorySecurity对象(在你的情况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) 

查找到下面的文件太..

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

+0

我想完全替换文件夹上的当前访问规则。我发现,如果我手动设置适用于“此文件夹,子文件夹和文件”的权限,我可以使用上面的代码重置权限。有没有办法在访问规则上设置“适用于”? –

+0

尝试使用“inheritanceFlags”和“propagationFlags”。设置InheritanceFlags.ContainerInherit,PropagationFlags.InheritOnly。因此,“FileSystemAccessRule”构造函数看起来像...... FileSystemAccessRule(“DOMAIN \ User Group”,FileSystemRights.FullControl,InheritanceFlags.ContainerInherit,PropagationFlags.InheritOnly,AccessControlType.Allow) – Naidu

+0

不幸的是,这不起作用。我确实注意到,当我把它看作服务器的域管理员时,目录上没有设置所有者。代码:FileSystemAccessRule(“DOMAIN \ User Group”,FileSystemRights.FullControl,InheritanceFlags.ContainerInherit,PropagationFlags.InheritOnly,AccessControlType.Allow) –