cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 août 2015
-
19 août 2006 à 19:59
cs_Jack
Messages postés14006Date d'inscriptionsamedi 29 décembre 2001StatutModérateurDernière intervention28 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
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()
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.