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

Delphi Discussion :

Restreindre les droits d'un dossier/fichier avec Delphi XE5


Sujet :

Delphi

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 9
    Points : 3
    Points
    3
    Par défaut Restreindre les droits d'un dossier/fichier avec Delphi XE5
    Bonjour à tous,

    Je commence un peu dans la création de dossiers/fichiers grâce à Delphi.

    Actuellement j'ai un petit bout de code qui me permet de créer une arborescence et de copier des fichiers à l'intérieur sous certaines conditions.
    Par contre, j'ai un besoin que je n'arrive pas exprimer en code grâce à Delphi.

    Est-il possible de limiter les droits windows des dossiers/fichiers que je crée à certains utilisateurs?

    Pour le moment, je crée un fichier et je le cache, mais j'aimerai plutôt que de le cacher enlever les droits à "Tout le monde" (onglet "sécurité" disponible au clic droit sur un dossier/fichier) et rajouter le droit en modification à certains utilisateurs ?

    Suis-je en dehors des limites de Delphi ? Je n'ai pas trouvé grand chose dans l'aide, mis a part l'attribut "faReadOnly" de System.SysUtils qui me permettrait, je pense, de mettre en lecture seul le document.

    Pour aider, ci-dessous la partie de mon code concernée (en deux parties, je fais appel à une mini fonction) :

    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
    function CreateFolderFR(AArr_Input: array of const): TArr_VarRec;
    const
      C_FuncName='CreateFolderFR';
      C_EnddirName='\';
    var 
      sdirNameEnCours: string;
      DirAttr: Integer;
    begin
      // Need to add the folder and restrict the visibility.
      sdirNameEnCours := CheckDirectoryOrCreate(sdirNameFR,'FR en cours');
      DirAttr := FileGetAttr(sdirNameEnCours);      // Le statut du répertoire se retrouve dans DirAttr
      // Si FileGetAttr ne retourne pas d'erreur et que le répertoire n'est pas déjà caché
      if DirAttr or faHidden > DirAttr then
         FileSetAttr(sdirNameEnCours, DirAttr or faHidden);
    end;
     
     
    function CheckDirectoryOrCreate(AsNamebefore: String; AsAdd :String) : String;
    Const
      C_EnddirName='\';
    var
      bDirExist: Boolean;
    begin
      result := AsNamebefore + AsAdd + C_EnddirName;
      bDirExist := SetCurrentDir(result);
      if not bDirExist then
      begin
        CreateDir(result);
      end;
    end;


    Merci d'avance à tout le monde de votre aide

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 105
    Points : 41 195
    Points
    41 195
    Billets dans le blog
    63
    Par défaut
    Bonjour,
    Citation Envoyé par zaz38000 Voir le message
    Est-il possible de limiter les droits windows des dossiers/fichiers que je crée à certains utilisateurs?
    Suis-je en dehors des limites de Delphi ?
    ce ne sont pas les limites de Delphi mais plutôt les limites de Windows qu'il faut mettre en cause. S'il est possible de le faire avec Windows (selon les versions de l'OS) alors il est possible de de le faire avec Delphi (quitte à utiliser une API Microsoft)

  3. #3
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 040
    Points
    7 040

  4. #4
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    je ne crois pas qu'il existe d'API pour ca. Par contre, tu as un exe pour le faire : icacls.
    voici un petit bout de code qui donne le controle total à "utilisateurs".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
         SetACLPath := 'icacls';
         Params := '"'+Dossier+'" /grant *S-1-5-32-545:(OI)(CI)F';
         ShellExecute(0, 'open', PChar(SetACLPath), PChar(Params), nil, SW_HIDE);

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Salut à tous,

    @SergioMaster : Oui c'est bien faisable avec Windows, donc j'ai de l'espoir.

    @Lung : J'ai du mal à la trouver gratuitement 'TNTFileSecurity', mais je vais ré-essayer si je patoge trop avec les lignes de commandes.

    @guillemouze : Je sentais que j'allais devoir essayer de passer par là! Je vais essayer de bidouiller ton bout de code pour adhérer à mon besoin. J'ai trouvé une ancienne référence pour m'aider :
    https://support.microsoft.com/fr-fr/kb/919240

    Merci à tous pour vos conseils, je vous dis au plus vite ce que ça va donner.

  6. #6
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Salut guillemouze,

    J'ai lu dans un article :
    "I believe icacls is only available on Vista/7"

    J'ai l'impression que c'est vrai, car j'ai retiré les droits à un fichier à la main (à partir d'un clic droit dans l'onglet sécurité) et suite au lancement de la ligne de commande le dossier est toujours non modifiables.

    Je vais quand même continuer sur la voie des lignes de commandes.

    p.s : de mon côté je suis sûr un environnement win10. Mais je suis tenter de tester avec un win7 pour voir tout de même si c'est pas moi qui exécute mal la ligne.

  7. #7
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    je viens de tester sur mon windows 10, j'ai créé un dossier "droits" sur mon D:, les autorisations par defaut sont execution/affichage/lecture, je lance
    icacls d:\droits /deny *S-1-5-32-545:(OI)(CI)F : refus de l'acces complet (F) a Utilisateurs (*S-1-5-32-545),
    et j'ai bien tout de cocher en refusé pour Utilisateurs

  8. #8
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 040
    Points
    7 040
    Par défaut
    Du temps où j'utilisais TNTFileSecurity sur XP, ça marchait bien et très facilement.
    Je vais essayer de fouiller mon poste perso pour voir si je l'ai toujours ...

  9. #9
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Re-bonjour à vous!

    @guillemouze : Je pense que je dois être à l'ouest au niveau de ma commande alors.. (ne pas me crier dessus si c'est le cas, j'ai jamais fait de ligne de commande sous windows, juste du delphi!)
    Je pense que je ne sélectionne pas bien l'utilisateur.

    De mon côté --> 'icacls D:\droits /deny Système: (OI)(CI)F'
    et en delphi
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
            SetACLPath := 'icacls';
            Params := '"'+'D:\droits' + '" /deny Système:(OI)(CI)F';
            ShellExecute(0, 'open', PChar(SetACLPath), PChar(Params), nil, SW_HIDE);

    J'ai utilisé Système, Tout le monde, mais je n'obtiens pas le résultat attendu.


    @Lung : Si ça te prend beaucoup de temps je ne veux pas t’embêter. Je dois encore creuser par moi-même de ce côté, je suis encore sur la possibilité des commandes

    Encore merci pour vos retours!

  10. #10
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Je crois que j'avais galéré aussi a utiliser le nom du groupe, surtout qu'il me semble qu'il est localisé, et va donc dépendre de la machine.
    C'est pour ca que j'ai utilisé un SID, tu les trouvera ici :
    http://www.windowsecurity.com/articl...Directory.html

    @Lung : ca m'interesse aussi si tu as du code qui permet de faire ca sans passer par un exe externe, je suis pas super fan de lancer des commandes externes.

  11. #11
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Bonjour guillemouze,

    A force de persévérance et grâce à ton dernier lien j'ai pu résoudre le problème!!

    En ligne de commande supprimer les droits à tous --> 'icacls D:\droits /deny *S-1-1-0: (OI)(CI)F'
    Maintenant il va falloir que je vois avec la personne concernée comment créer un compte avec les bons utilisateurs et qu'il me donne le SID approprié

    En ce qui concerne du code Delphi, ce qui ne fonctionnait pas c'était que j'avais laissé un '\' en trop dans mon chemin, le code ressemble à ça maintenant :
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            sdirNameencours2 := copy(sdirNameEnCours,1,length(sdirNameEnCours)-1); // besoin d'enlever le '\' de la fin.
            SetACLPath := 'icacls';  // On fait appel à  un exe externe 
            Params := '"'+sdirNameencours2+'"' + ' /deny *S-1-1-0:(OI)(CI)F';  //S-1-1-0 représente everyone en sid ex site :
            // http://www.windowsecurity.com/articles-tutorials/windows_server_2008_security/Well-Known-SIDs-Windows-Server-2008-R2-Active-Directory.html
            ShellExecute(0, 'open', PChar(SetACLPath), PChar(Params), nil, SW_HIDE);

    Oui, je me suis laissé pas mal de commentaire!

    Sinon tu as posté une demande à @Lung donc j'attends jusqu'à demain soir pour clore le sujet

    En grand merci à guillemouze et merci aux autres pour votre contribution.

  12. #12
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Attention, l'ordre des permissions est un peu particulier, le deny est prioritaire sur le grant
    Citation Envoyé par windows
    Vous activez des entrées Refuser. Les entrées Refuser sont prioritaires sur les entrées Autoriser. Si un utilisateur est membre de deux groupes, l’un avec une autorisation Autoriser et un autre avec l’autorisation Refuser, l’autorisation de l’utilisateur sera refusée.
    Si tu as un user zaz, que tu deny le controle total a tout le monde, et que tu grant le controle total a zaz, alors zaz ne pourra rien faire sur ce dossier, le deny de tout le monde sera prioritaire

  13. #13
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2016
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2016
    Messages : 9
    Points : 3
    Points
    3
    Par défaut
    Merci guillemouze pour la précision.

    J'avais connaissance de la priorisation des interdictions.
    J'avais l'intention de créer un groupe comportant tout le monde sauf mes 4 super users.
    J'enlève le droit au groupe, ainsi seul les 4 super users peuvent modifier les dossiers concernés et les autres dossiers restent disponibles à tout le monde.

    J'ai fait le test avec *S-1-1-0 pour voir si c'était bien ok avec Delphi, je dois encore créer le groupe en question, récupérer son SID et le remplacer dans le code.

Discussions similaires

  1. Réponses: 6
    Dernier message: 01/11/2010, 12h38
  2. Obtenir les droits d'ecriture dans fichiers et base de registre
    Par Sunchaser dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 17/07/2006, 11h33
  3. [XP Pro] Restreindre les droits d'un utilisateur
    Par Cereal123 dans le forum Sécurité
    Réponses: 5
    Dernier message: 12/10/2005, 14h57
  4. Gérer les droits d'un dossier/RPC indisponible
    Par xant dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 22/08/2005, 13h47

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