2017-08-24 103 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) –