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

VB.NET Discussion :

Editer droit d'acces dossier [Débutant]


Sujet :

VB.NET

  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Editer droit d'acces dossier
    Bonjour ou plutôt bonsoir à tous,

    Je me présente Xavier, je suis débutant en programmation et voila que je suis fasse à un problème que je n'arrive pas à résoudre par moi-même, j'ai parcouru énormément de forum et je ne trouve mon bonheur nul part
    Voici mon problème :

    J'aimerai éditer les droits accès en écriture d'un dossier en particulier (D:\ArsolProjects) afin que l'utilisateur ne soit ni capable de renommer les dossier ni d'y ajouter des fichiers ou de les supprimer et je souhaiterai apprendre à utiliser cacls directement avec Vb.Net mais je n'y parvient pas je pense que ma ligne d'argument n'est pas bonne mais j'ai essayé de nombreuse chose et je n'y parviens toujours pas c'est pourquoi je fais appel à vous. Je tiens à remercier toutes personnes qui s'attardera sur mon problème et qui prendra soin de me répondre.

    Voici quelque ligne de mon code :

    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
        Public Function ProtectionDossier()
            Dim p As System.Diagnostics.Process = New System.Diagnostics.Process
            Dim CurrentUser As String = Environment.UserName()
            Dim Dossier As String = "D:\ArsolProjects"
            Dim CommandLine As String
     
            CommandLine = Dossier & " /P " & Chr(34) & CurrentUser & Chr(34) & ":R /T"
     
            Try
                p.StartInfo.FileName = "Cacls.exe"
                p.StartInfo.Arguments = CommandLine
                p.StartInfo.RedirectStandardInput = True
                p.StartInfo.RedirectStandardOutput = True
                p.StartInfo.UseShellExecute = False
                p.StartInfo.WindowStyle = Diagnostics.ProcessWindowStyle.Hidden
     
                p.Start()
                p.WaitForExit(1000)
     
                Return p.StandardOutput.ReadToEnd.ToString
            Catch ex As Exception
                Return ex.Message
            Finally
                If Not p Is Nothing Then
                    p.Dispose()
                    p = Nothing
                End If
            End Try
        End Function
    ------------------------------------

    Voila un tout grand merci à vous.
    Cordialement,

    Xavier

  2. #2
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonjour firegreen,

    Gérer les permissions n'est pas chose facile !
    Avant toute chose il faut déterminer quels sont les droits existants sur le dossier et surtout s'il est possible d'appliquer des permissions avec le compte depuis lequel l'utilisateur exécute ton logiciel.

    De plus l'outil en ligne de commande nommé "cacls.exe" est valable pour les versions qui précèdent Windows XP.
    Depuis Windows Vista jusqu'à Windows 8.1 l'outil se nomme : "icacls.exe".

    Je rajouterais qu'il est maintenant recommandé de coupler l'usage de l'outil : "takeown.exe" lorsqu'on souhaite utiliser "icacls.exe" car bien souvent on dot se rendre propriétaire d'un fichier ou d'u dossier avant de vouloir modifier les droits d'accès.

    Enfin la protection de dossier comme tu semble vouloir obtenir le résultat n'est pas possible car si tu appliques des droits depuis le compte de l'utilisateur qui exécute ton logiciel alors l'utilisateur pourra aisément (moyennant un minimum de connaissance sur le NTFS) les modifier derrière toi pour rétablir.
    En terme de sécurité, il faudrait créer un autre compte utilisateur et appliquer des permission qui lui sont propres mais si le compte de l'utilisateur est membre du groupe "administrateurs" alors je ne donne pas chère de la pérennité des restrictions que tu auras appliqués jadis.

    Voici un exemple d'utilisation de prise de possession d'un répertoire, juste pour illustrer l'utilisation de la classe process et les arguments valides pour les différentes cultures de langue du système d'exploitation sur lequel s'exécute ton programme :

    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
     
    Imports System.IO
    Imports System.Security.AccessControl
    Imports System.Security.Principal
     
     Public Sub TakeOwnerDirectory(ByVal Path$)
            If Directory.Exists(Path) Then
                Try
                    Dim info As New DirectoryInfo(Path)
                    Dim accessControl As DirectorySecurity = info.GetAccessControl
                    accessControl.SetOwner(New NTAccount(Environment.UserName))
                    info.SetAccessControl(accessControl)
                Catch ex As Exception
                End Try
                ProcessLauncher("takeown.exe", "/F """ & Path & """ /R /D O")
                ' Le SID permet de prendre en compte le groupe administrateurs dans toutes les cultures de langue (adinistrateurs, administrator,...and so on.....)
                ProcessLauncher("icacls.exe", """" & Path & """ /grant *S-1-5-32-544:(F) /t")
            End If
        End Sub
     
        Private Sub ProcessLauncher(ByVal FileName$, ByVal Args$)
            Try
                Dim process2 As New Process
                With process2
                    .StartInfo.FileName = FileName
                    .StartInfo.Arguments = Args
                    .StartInfo.UseShellExecute = False
                    .StartInfo.RedirectStandardOutput = False
                    .StartInfo.CreateNoWindow = True
                    .Start()
                    .WaitForExit()
                    .Close()
                End With
            Catch ex As Exception
            End Try
        End Sub


    A+

  3. #3
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Bonjour wallace1,

    Je te remercie énormément de ta réponse, qui me surprend assez d'ailleurs parce que j'utilise sous Windows 7 l'utilitaire "cacls.exe" et directement je tape en commande exécuter ceci sans les guillemets de début et de fin:
    "cacls "D:\ArsolProjects" /P "Xavier Rentmeister":R /T" et directement le résultat est là. L'utilisateur "Xavier Rentmeister" n'a plus le droit d’effectuer quoi que ce soit dans le dossier ArsolProjects et tous ses sous-dossier en écriture du moins alors je sais parfaitement bien que l'utilisateur chevronner aura l'intelligence de remédier a ce problème mais je ne m'inquiète pas pour çà parce que l'utilisateur qui se servira de ce dossier (Mon père) est une quille dans le milieu et le but surtout n'est pas d'empêcher l'utilisateur d'y accédé mais de protéger le nom des dossiers lui interdire de renommer le moindre dossier à partir du moment ou il entre dans "D:\ArsolProjects".

    Je m'explique :

    Je lui ai développé un petit programme pour l'aider dans la gestion de sa clientèle, sa création de projet et sa facturation etc. etc... Le problème tu vois c'est que un moment donné le programme va créer des dossiers dans l'explorateur à un endroit précis puis tous les documents qu'il réalise pour un client et pour un projet précis va s'enregistrer dans un dossier bien précis portant un nom bien précis donc la structure est la suivante :

    Admettons que le client "Tartenpion" soit le 65 ème clients dans sa base de donnée et que le projet de réalisation "Domotique" soit le 4 ème projet pour CE client alors il y aura un structure comme celle-ci :

    "D:\ArsolProjects\Clients\065_Tartenpion\004_Domotique\Clipon"

    Plusieurs sous dossier se crée notamment le dossier "Clipon" dans lequel le programme va enregistrer les factures, les documents qu'il aura créé depuis celui-ci.
    Le problème avec tout çà je lui ai bien dit de ne jamais aller créer de dossier ou surtout pas renommer les dossiers parce que sinon le programme génèrerais une erreur mais par précausion je préfère empècher l'accès avec ces dossiers.

    Un tout grand merci encore pour le temps perdu pour moi.

    Premier écrit sur un forum en tout cas chouette communauté !

  4. #4
    Candidat au Club
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Avril 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2013
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Re- Bonjour voila j'ai bien résolu mon problème j'y suis arrivé d'une autre manière

    Je remercie bien évidement Wallace qui a passé un peu de son temps pour m'aider! Je poste ma solution pour ceux que çà pourrait intéresser

    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
    Imports System.IO
    Imports System.Security.Principal
    Imports System.Security.AccessControl
     
    Module RTS_Fonction
        Dim CurrentUser As String = Environment.UserName()
        Dim Dossier As String = "D:\ArsolProjects"
        Public Sub OterProtectionDossier()
            Dim FolderPath As String = Dossier
            Dim UserAccount As String = CurrentUser
            Dim FolderInfo As IO.DirectoryInfo = New IO.DirectoryInfo(FolderPath)
            Dim FolderAcl As New DirectorySecurity
            FolderAcl = FolderInfo.GetAccessControl()
            FolderAcl.AddAccessRule(New FileSystemAccessRule(UserAccount, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit Or InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow))
            FolderInfo.SetAccessControl(FolderAcl)
        End Sub
        Public Sub ProtectionDossier()
            Dim FolderPath As String = Dossier
            Dim UserAccount As String = CurrentUser
            Dim FolderInfo As IO.DirectoryInfo = New IO.DirectoryInfo(FolderPath)
            Dim FolderAcl As New DirectorySecurity
            FolderAcl = FolderInfo.GetAccessControl()
            FolderAcl.RemoveAccessRuleAll(New FileSystemAccessRule(UserAccount, FileSystemRights.FullControl, InheritanceFlags.ContainerInherit Or InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow))
            FolderAcl.AddAccessRule(New FileSystemAccessRule(UserAccount, FileSystemRights.Read, InheritanceFlags.ContainerInherit Or InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow))
            FolderInfo.SetAccessControl(FolderAcl)
        End Sub
    End Module
    Encore mille merci et à bientôt ;-)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Droit d'accès dossier, versioning svn
    Par flavdu44 dans le forum Apache
    Réponses: 6
    Dernier message: 13/06/2013, 21h39
  2. Droits d'accès dossier
    Par Shredder dans le forum Langage
    Réponses: 3
    Dernier message: 19/08/2008, 18h34
  3. Droits d'accès dossier partagé
    Par threshold dans le forum Windows XP
    Réponses: 2
    Dernier message: 04/01/2008, 11h56
  4. [APACHE] Modifié les droits d'accès à un dossier.
    Par will-scs dans le forum Apache
    Réponses: 1
    Dernier message: 26/08/2005, 22h12

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