Bonjour

J'avais passé un peu de temps a piocher la gestion des droits sur les fichier et folder ave C#
J'avais cru comprendre quelque chose et en faisant une petite synthese j'ai pondu le code ci dessous pour tester si un utilisateur avait les droits de creation et d'ecriture dans un repertoire

Je n'ai vraissemblablement rien compris puisque si je demande l'accessibilité sur un lecteur DVD cette methode trouve que j'ai ces droits or un DVD est evidement Read Only, or en résumé, les deux test suivants rendent TRUE

Quelqu'un connait une bonne méthode ?

Merci de votre aide

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
          if ((rule.FileSystemRights & FileSystemRights.CreateDirectories) == FileSystemRights.CreateDirectories)
          if ((rule.FileSystemRights & FileSystemRights.Write) == FileSystemRights.Write)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
    // ********************************************************************************
    static public bool HasRights(string path, WindowsIdentity account)
    {
      if (path.Length <= 0)
      {
        return false;
      }
      if (!Directory.Exists(path))
      {
        return false;
      }
      DirectorySecurity dirSecurity = null;
      try
      {
        dirSecurity = Directory.GetAccessControl(path);
      }
      catch (UnauthorizedAccessException e)
      {
        return false;
      }
 
      var rules = dirSecurity.GetAccessRules(true, true, typeof(NTAccount));
 
      WindowsPrincipal wp = new WindowsPrincipal(account);
 
      int R=0;
 
      foreach (FileSystemAccessRule rule in rules)
      {
        if (wp.IsInRole(rule.IdentityReference.Value))
        {
          if ((rule.FileSystemRights & FileSystemRights.CreateDirectories) == FileSystemRights.CreateDirectories)
          {
            R++;
          }
          if ((rule.FileSystemRights & FileSystemRights.Write) == FileSystemRights.Write)
          {
            R++;
          }
        }
      }
      if (R >= 2)
      {
        return true;
      }
      return false;
    }