2017-08-24 1 views
0

Je dois réinitialiser les autorisations sur un dossier créé à partir de mon application de formulaires Web ASP.Net (il s'agit d'un projet hérité). Je peux créer le dossier bien, mais lorsque j'essaie de réinitialiser les autorisations sur le dossier qui vient d'être créé, j'obtiens l'erreur "Tentative d'effectuer une opération non autorisée."VB.Net SetAccessControl échoue lors de la réinitialisation des autorisations

Lorsque je crée les règles de sécurité que j'utilise ce code:

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

Il est encapsulé dans une fonction appelée GetSecurity (proj Comme projet) qui retourne un objet DirectorySecurity.

Mon code défaillant est ci-dessous. La première partie du I fonctionne correctement, mais la partie Else échoue. Je me suis assuré de m'ajouter au dossier dans la fonction car il fonctionne comme IIS sur ma machine locale. Je suis également le propriétaire du dossier sur le serveur distant.

Répondre

0

Probablement la meilleure façon est d'ajouter les règles d'accès à DirectorySecurity objet de la DirectoryInfo (dans votre cas directoryProperties)

Et puis définissez l'objet DirectorySecurity à SetAccessControl de l'objet info répertoire en ajoutant de nouvelles règles.

votre déclaration peut ressembler à autre comme indiqué ci-dessous ..

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) 

Regardez dans la documentation ci-dessous .. trop

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

J'essaie de remplacer complètement les règles d'accès actuelles sur le dossier. J'ai trouvé que si je définissais manuellement les autorisations à appliquer à "Ce dossier, sous-dossiers et fichiers", je peux réinitialiser les autorisations avec mon code ci-dessus. Existe-t-il un moyen de définir le "apply to" sur la règle d'accès? –

+0

Essayez d'utiliser "inheritanceFlags" et "propagationFlags". Définir InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly. Donc, le constructeur "FileSystemAccessRule" ressemble à ...... FileSystemAccessRule ("DOMAINE \ Groupe d'utilisateurs", FileSystemRights.FullControl, InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly, AccessControlType.Allow) – Naidu

+0

Cela ne fonctionne malheureusement pas. J'ai remarqué qu'aucun propriétaire n'est défini sur le répertoire lorsque je le considère comme un administrateur de domaine du serveur. Code: FileSystemAccessRule ("DOMAINE \ Groupe d'utilisateurs", FileSystemRights.FullControl, InheritanceFlags.ContainerInherit, PropagationFlags.InheritOnly, AccessControlType.Allow) –