IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

autorisation de lecture sur dossier


Sujet :

C#

  1. #1
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut autorisation de lecture sur dossier
    Bonjour,
    Je voudrais bien savoir si j'ai les droits de lecture sur un dossier d'un serveur distant.
    Je peux bien sûr faire un pâté du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    try
          {
            Directory.GetAccessControl(dirPath);
            return true;
          }
          catch
          {        
            return false;
          }
    Mais je n'aime pas du tout faire ce genre de bricole.
    J'ai cherché une solution simple mais n'en trouve pas.
    Et comme je suis une parfaite pince en ce qui concerne les droits utilisateurs, je ne comprends rien, mais alors rien du tout aux différentes méthodes ou propriétés proposées par Directory.
    Allez, dites-moi qu'il y a un truc tout simple...

    PS : Bananier et pommes sautées à tout le monde

  2. #2
    Membre actif
    Avatar de Proteus91
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    150
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 150
    Points : 275
    Points
    275
    Par défaut
    Tu peux peut etre essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
                NTAccount MyAccount = new NTAccount("administrators");
                SecurityIdentifier MySecurityIdentifier = MyAccount.Translate(typeof(SecurityIdentifier)) as SecurityIdentifier;
                DirectorySecurity MyDirSecurity = new DirectoryInfo(@"TON REPERTOIRE ??").GetAccessControl();
                AuthorizationRuleCollection MyAuthorisation = MyDirSecurity.GetAccessRules(true, true, typeof(SecurityIdentifier));
                foreach (FileSystemAccessRule MyFileRules in MyAuthorisation)
                {
                    if (MySecurityIdentifier.CompareTo(MyFileRules.IdentityReference as SecurityIdentifier) == 0)
                        Console.WriteLine(MyFileRules.FileSystemRights);
                }

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par Proteus91 Voir le message
    Tu peux peut etre essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
                DirectorySecurity MyDirSecurity = new DirectoryInfo(@"TON REPERTOIRE ??").GetAccessControl();
    ...
    Le problème, c'est que cette ligne peut justement lever une exception si l'utilisateur n'a pas accès à ce répertoire...

    D'un autre côté, l'approche de pphil n'est pas suffisante non plus, car le fait de pouvoir accéder aux ACL d'un répertoire n'implique pas forcément qu'il a le droit de lire dedans (bien qu'en général ce sera le cas)

    Bref, a priori il faut combiner les 2 : catcher l'exception, et vérifier les access rules

    Moi j'utilise cette méthode :

    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
            private static bool HasReadPermissionOnDir(string path)
            {
                try
                {
                    var readAllow = false;
                    var readDeny = false;
                    var accessControlList = Directory.GetAccessControl(path);
                    var accessRules = accessControlList.GetAccessRules(true, true, typeof(SecurityIdentifier));
     
                    foreach (FileSystemAccessRule rule in accessRules)
                    {
                        if ((FileSystemRights.Read & rule.FileSystemRights) != FileSystemRights.Read) continue;
     
                        if (rule.AccessControlType == AccessControlType.Allow)
                            readAllow = true;
                        else if (rule.AccessControlType == AccessControlType.Deny)
                            readDeny = true;
                    }
     
                    return readAllow && !readDeny;
                }
                catch (UnauthorizedAccessException)
                {
                    return false;
                }
            }

  4. #4
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Merci Tomlev.
    J'ai utilisé ta méthode. Faudra encore que je prenne du temps pour la comprendre.
    Il y a un truc que je ne saisi pas.
    Quand l'exception est levée à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var accessControlList = Directory.GetAccessControl(path);
    il s'agit d'une DirectoryNotFoundException et non une UnauthorizedAccessException ?????
    Pourtant le dossier existe..
    Si je fais un GetFiles sur le même dossier, ça me retourne un tableau vide.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par ppphil Voir le message
    Il y a un truc que je ne saisi pas.
    Quand l'exception est levée à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var accessControlList = Directory.GetAccessControl(path);
    il s'agit d'une DirectoryNotFoundException et non une UnauthorizedAccessException ?????
    Pourtant le dossier existe..
    Bizarre... peut-être parce que tu n'as pas non plus le droit d'accéder au répertoire parent, donc il ne peut pas vérifier l'existence du répertoire

    Citation Envoyé par ppphil Voir le message
    Si je fais un GetFiles sur le même dossier, ça me retourne un tableau vide.
    Ca c'est encore plus bizarre... ça devrait clairement lever une exception il me semble !

  6. #6
    Membre éclairé Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 612
    Points : 685
    Points
    685
    Par défaut
    Ca c'est encore plus bizarre... ça devrait clairement lever une exception il me semble !
    Ouais, et quand je tape la même adresse dans le navigateur Windows, il me montre un dossier vide....
    Mais bon, comme je l'ai dit, je ne vaut pas tripette dans la gestion des utilisateurs...
    En tous cas, merci pour ton intervention.
    Bonne journée

Discussions similaires

  1. [OLE DB] Autorisation de lecture sur Msysobjects
    Par petit arbre dans le forum Access
    Réponses: 11
    Dernier message: 02/12/2006, 12h54
  2. Réponses: 5
    Dernier message: 10/09/2006, 14h33
  3. Erreur de lecture sur BD Access avec delphi
    Par e120650 dans le forum Bases de données
    Réponses: 1
    Dernier message: 10/06/2005, 10h17
  4. [C#] lecture sur port série
    Par Iokanaan dans le forum Windows Forms
    Réponses: 3
    Dernier message: 03/05/2005, 13h50
  5. [Kylix] Lecture sur le port série en C++
    Par MD Software dans le forum EDI
    Réponses: 1
    Dernier message: 08/05/2004, 12h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo