[VB 2005] Droits d'accès d'un fichier

cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 19 août 2006 à 19:59
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 20 août 2006 à 01:21
Bonjour
Je suis encore paumé dans .Net
Ce que je veux faire :
Mes applications tournent sur des machines en réseau.
Au lancement, l'application vérifie sur le serveur du réseau si une nouvelle version est disponible.
Or, selon les droits des utilisateurs, la copie d'un fichier (un EXE) depuis le serveur vers un répertoire local peut ne pas être autorisé.
Je cherche donc à déterminer si le user a ses droits pour éviter de perdre du temps à tenter l'opération.

Je me suis donc dis : je vais tester les droits d'écriture sur le répertoire (ou sur le fichier EXE)
Voilà ce que j'ai fait :

   Dim monDomaineCompte
As
String =
My.User.Name
' Sous la forme Domain\User
   ' Récupère les infos de ce répertoire
   Dim Répertoire
As
String =
"C:"
   Dim DirInfo
As
New DirectoryInfo(Répertoire)

   ' Isole les données liées aux droits d'accès (ACL)
   Dim DirSecurity
As DirectorySecurity = DirInfo.GetAccessControl()

   ' Récupère les infos de ce fichier
   Dim Fichier
As
String =
"C:\Program Files\Test EnvoxDoc\EnvoxDoc.EXE"
   Dim FichierInfo
As
New FileInfo(Fichier)

   Dim FichierSecurity
As FileSecurity = FichierInfo.GetAccessControl()
Mais voilà, après je suis coincé.
J'ai les droits dans les structures DirSecurity et FichierSecurity, mais je n'arrive pas :
   - à lister ces droits
   - à tester si, parmi ces droits, il y a ceux qui m'interressent (genre droits d'écriture)

Une idée serait la bien venue

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Champion du monde de boule de cristal - 2005
Le savoir est la seule matière qui s'accro

2 réponses

Utilisateur anonyme
19 août 2006 à 21:33
Chose qui n'est pas simple du tout.
On utilise un AuthorizationRuleCollection qui contient toute les autorisations (pas les interdictions) sur le fichier ou le dossier.
On boucle ensuite sur ces autorisations, il suffit donc de vérifier si le nom de l'utilisateur y figure.




Une ébauche de code:





Dim
monDomaineCompte
As

String
=
My
.User.Name
' Sous la forme Domain\User

' Récupère les infos de ce répertoire

Dim
Répertoire
As

String
=
"C:\"

Dim
DirInfo
As

New
System.IO.DirectoryInfo(Répertoire)

' Isole les données liées aux droits d'accès (ACL)

Dim
DirSecurity
As
System.Security.AccessControl.DirectorySecurity = DirInfo.GetAccessControl()

' Récupère les infos de ce fichier

Dim
Fichier
As

String
=
"C:\Program Files\Test EnvoxDoc\EnvoxDoc.EXE"

Dim
FichierInfo
As

New
System.IO.FileInfo(Fichier)

Dim
FichierSecurity
As
System.Security.AccessControl.FileSecurity = FichierInfo.GetAccessControl()

Dim
AccessRules
As
System.Security.AccessControl.AuthorizationRuleCollection = FichierSecurity.GetAccessRules(
True
,
True
,
GetType
(System.Security.Principal.NTAccount))

If
AccessRules
IsNot

Nothing

Then

  
For

Each
AuthorizationRule
As
System.Security.AccessControl.AuthorizationRule
In
AccessRules

    
Dim
AccessRule
As
System.Security.AccessControl.AccessRule =
CType
(AuthorizationRule, System.Security.AccessControl.AccessRule)

    
Dim
Identity
As

String
= AuthorizationRule.IdentityReference.Value

    
Dim
Access
As
System.Security.AccessControl.AccessControlType = AccessRule.AccessControlType

    
'Ici il faut que tu regarde si Identity est égal au nom de l'user en cours.

    
'Acces est normalement à 0 (Allow)

  
Next

End

If






Le seul problème, c'est qu'il existe une autorisation pour "tout le monde" et une autorisation pour seulement les utilisateurs de la machine. Donc il faut aussi filtrer tout ca. Mais ca risque de devenir fouis.<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>




Kenji





Il était une fois, un pauvre petit [file:///D:/reglement.aspx règlement] que personne ne lisait. Il est tout sympa mais il est triste, aidez-le, lisez-le, ca lui ferait tellement plaisir ainsi qu'a nous. Merci.
0
cs_Jack Messages postés 14007 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 78
20 août 2006 à 01:21
Cool Charles.
J'appronfondis. Merci
0
Rejoignez-nous