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 :

Développement appli permissions NTFS


Sujet :

C#

  1. #21
    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 : 42
    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 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Zhamy Voir le message
    Et bien en fait, je n'ai pas d'exception attendu. J'ai pensé que la structure try, catch était la mieux appropriée.
    Ben les exceptions, comme leur nom l'indique, c'est fait pour gérer des cas exceptionnels. Si tu ne prévois pas de cas exceptionnel, ça n'a pas de sens d'intercepter une erreur que tu ne sauras pas gérer de toutes façons

    Citation Envoyé par Zhamy Voir le message
    Comment je pourrais adapter ce script avec ce fameux clic droit sur les permissions ?
    Euh, c'est un peu trop large comme question ça

    Je te mets sur la voie : pour savoir quelle règle est sélectionnée dans ta ListView, tu peux affecter l'objet AccessRule à la propriété Tag du ListViewItem correspondant (et pareil pour les utilisateurs). De cette façon, à partir des éléments sélectionnés, tu peux obtenir l'utilisateur et la règle

  2. #22
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 125
    Points : 63
    Points
    63
    Par défaut
    T'es un chef tom, tu vois j'aimerai faire un ContextMenu sur les items.
    L'item correspond à l'User. Ensuite dans le ContextMenu, il y aura les rules associés au permissions (je suis confus, navré pour mon expression si laborieuse).
    Grossomodo on pourra éditer les droits NTFS sur les dossiers pour chaque utilisateurs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // ModifPermissions
    this.ModifPermissions.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { 
    this.ChangeToFullControl,
    this.ChangeToRead,
    this.ChangeToWrite});
    après par exemple ChangeToFullControl sera comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    this.ChangeToFullControl.Index = 0;
    this.ChangeToFullControl.Text = "Contrôle Total";
    this.ChangeToFullControl.Click += new System.EventHandler(this.ChangeToFullControl_Click);
    et la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void ChangeToFullControl_Click(object sender, System.EventArgs e)
    {
           FileSystemAccessRule rule = new FileSystemAccessRule (rule.IdentityReference.Value, FileSystemRights.FullControl);
    }
    Est ce que cette démarche est correcte, ou je m'égare total ?

  3. #23
    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 : 42
    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 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Zhamy Voir le message
    Est ce que cette démarche est correcte, ou je m'égare total ?
    Ca me semble correct. Par contre il faudra aussi faire une action au niveau du DirectorySecurity, genre appeler SetAccessRule ou un truc comme ça, et faire un SetAccessControl sur le DirectoryInfo

  4. #24
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 125
    Points : 63
    Points
    63
    Par défaut
    Envoyé par Tomlev
    Par contre il faudra aussi faire une action au niveau du DirectorySecurity, genre appeler SetAccessRule ou un truc comme ça, et faire un SetAccessControl sur le DirectoryInfo
    Heu...ouai, genre comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DirectorySecurity dirSec = Directory.GetAccessControl(((TreeView)sender).SelectedNode.FullPath);
    AuthorizationRuleCollection rules = dirSec.GetAccessRules(true, true, typeof(NTAccount));
    Sinon le clic droit est Ok mais je souhaiterai qu'il fonctionne uniquement lorsqu'on clique sur l'utilisateur. En l'occurance ici on a > Contrôle Total si on clique n'importe où dans le ListView.

  5. #25
    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 : 42
    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 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Zhamy Voir le message
    Heu...ouai, genre comme ça ?
    Euh... je vois pas le rapport : tu fais un get alors qu'il faudrait faire un set pour modifier l'objet

    Citation Envoyé par Zhamy Voir le message
    Sinon le clic droit est Ok mais je souhaiterai qu'il fonctionne uniquement lorsqu'on clique sur l'utilisateur. En l'occurance ici on a > Contrôle Total si on clique n'importe où dans le ListView.
    Il faut que tu vérifies si un utilisateur est sélectionné avant d'afficher le menu contextuel. Pour ça tu peux gérer l'évènement Opening du ContextMenuStrip :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
            {
                e.Cancel = listView1.SelectedItems.Count == 0;
            }

  6. #26
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 125
    Points : 63
    Points
    63
    Par défaut
    J'ai bien mon ContextMenuStrip, mais dans le debug je peux toujours faire clic droit n'importe où dans le ListView.

    Pourtant j'ai bien ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
    {
         e.Cancel = UserView.SelectedItems.Count == 0;
    }

  7. #27
    Membre émérite Avatar de meziantou
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Points : 2 439
    Points
    2 439
    Par défaut
    teste plutôt si l'utilisateur a cliqué sur un item avec la fonction HitTest

  8. #28
    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 : 42
    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 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Zhamy Voir le message
    Pourtant j'ai bien ajouté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private void contextMenuStrip1_Opening(object sender, CancelEventArgs e)
    {
         e.Cancel = UserView.SelectedItems.Count == 0;
    }
    Il suffit pas de copier/coller ce code... tu as aussi lié cette méthode à l'évènement Opening du ContextMenuStrip dans le designer ?

    J'ai testé chez moi et ça marche nickel...

  9. #29
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 125
    Points : 63
    Points
    63
    Par défaut
    Ok merci tom ça marche nickel j'avais oublié d'ajouter dans le designer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.contextMenuStrip1.Opening += new System.ComponentModel.CancelEventHandler(this.contextMenuStrip1_Opening);
    J'ai fait une fonction ChangeToFullControl qui permet d'affecter le contrôle total à un user :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    private void ChangeToFullControl_Click(object sender, System.EventArgs e)
    {
          DirectoryInfo dir = new DirectoryInfo((TreeView)sender).SelectedNode.FullPath);
          DirectorySecurity dirsec = new DirectorySecurity();
                dirsec.SetAccessRuleProtection(false, false);
          //Second parameter is ignored, removing access rule protection
     
          FileSystemAccessRule newrule = new FileSystemAccessRule("User", FileSystemRights.Modify, AccessControlType.Allow);
          dirsec.AddAccessRule(newrule);
          dir.SetAccessControl(dirsec);
    }
    Mais voila j'obtiens après debug :
    Impossible d'effectuer un cast d'un objet de type 'System.Windows.Forms.ToolStripMenuItem' en type 'System.Windows.Forms.TreeView'.

  10. #30
    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 : 42
    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 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Zhamy Voir le message
    Mais voila j'obtiens après debug :
    Impossible d'effectuer un cast d'un objet de type 'System.Windows.Forms.ToolStripMenuItem' en type 'System.Windows.Forms.TreeView'.
    Ben oui... qu'est-ce qui te fait penser que le sender est un TreeView ? ChangeToFullControl est un élément du menu, pas un TreeView...

    De toutes façons tu sais déjà quel TreeView t'intéresse, tu peux y accéder directement par son nom de variable

  11. #31
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 125
    Points : 63
    Points
    63
    Par défaut
    Ok c'est corrigé, mais j'ai un
    IdentityNotMappedException was unhandled.
    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
     
    private void ChangeToFullControl_Click(object sender, System.EventArgs e)
    {
           DirectoryInfo dInfo = new DirectoryInfo(FoldersView.SelectedNode.FullPath);
           DirectorySecurity dSecurity = dInfo.GetAccessControl();
     
           dSecurity.SetAccessRuleProtection(true, false);
     
           dSecurity.AddAccessRule(new FileSystemAccessRule(
           @"COMPUTER\USERNAME",
           FileSystemRights.FullControl,
           InheritanceFlags.ObjectInherit,
           PropagationFlags.None,
           AccessControlType.Allow)
           );
     
           dInfo.SetAccessControl(dSecurity);
    }
    Tu sais j'essaye de gérer la liste de contrôle d'accès (DACL) Windows.

  12. #32
    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 : 42
    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 749
    Points
    39 749
    Par défaut
    Plutôt que de passer par le nom de l'utilisateur, essaie d'utiliser directement le IdentityReference avec lequel tu avais rempli la ListView. Pour pouvoir le récupérer, affecte le à la propriété Tag du ListViewItem quand tu remplis la liste

  13. #33
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 125
    Points : 63
    Points
    63
    Par défaut
    Heu... Tu parles de cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string username = this.UserView.Items.ToString();
    Parceque ça marche dans le debug mais lorsque je clique pour affecter le FullControl à un utilisateur, il me dit :
    SystemException was unhandled
    La relation d'approbation entre le domaine principal et le domaine approuvé a échoué.

  14. #34
    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 : 42
    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 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Zhamy Voir le message
    Heu... Tu parles de cela ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    string username = this.UserView.Items.ToString();
    Euh, non, en fait je vois même pas le rapport avec ce que j'ai dit

    Ce code n'a aucun sens, il va juste affecter à username la chaine "System.Windows.Forms.ListView.ListViewItemCollection"

    Ce que je veux dire, c'est que quand tu ajoutes un ListViewItem pour représenter un objet (une AccessRule par exemple), il faut que tu affectes à la propriété Tag du ListViewItem l'objet représenté. De cette façon, tu peux récupérer l'objet à partir du ListViewItem sélectionné (UserView.SelectedItems[0].Tag)

  15. #35
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 125
    Points : 63
    Points
    63
    Par défaut
    Finalement ça marche sans le Tag. J'ai fait comme ça :
    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
     
    private void ChangeToFullControl_Click(object sender, System.EventArgs e)
    {
            DirectoryInfo dInfo = new DirectoryInfo(FoldersView.SelectedNode.FullPath);
            DirectorySecurity dSecurity = dInfo.GetAccessControl();
     
            dSecurity.SetAccessRuleProtection(true, false);
     
            string username = this.UserView.SelectedItems[0].Text;
     
            dSecurity.AddAccessRule(new FileSystemAccessRule(
                    @username,
                    FileSystemRights.FullControl,
                    InheritanceFlags.ObjectInherit,
                    PropagationFlags.None,
                    AccessControlType.Allow)
                    );
     
            dInfo.SetAccessControl(dSecurity);
            UserView.Refresh();
    }
    Par contre j'aimerai que la ListView se rafraichisse après avoir affecter le droit à l'user.
    J'ai inséré UserView.Refresh() mais ça ne marche pas.

  16. #36
    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 : 42
    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 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Zhamy Voir le message
    Par contre j'aimerai que la ListView se rafraichisse après avoir affecter le droit à l'user.
    J'ai inséré UserView.Refresh() mais ça ne marche pas.
    Refresh, ça rafraichit l'affichage, pas les données.

    Vu que c'est toi qui remplit manuellement la ListView, c'est à toi de la rafraichir (c'est à dire la remplir à nouveau)

  17. #37
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 125
    Points : 63
    Points
    63
    Par défaut
    Tu veux dire que je dois le faire manuellement ?
    J'avais pensé qu'il y avait une méthode.
    En tout cas un très grand merci pour ton aide.

  18. #38
    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 : 42
    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 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Zhamy Voir le message
    Tu veux dire que je dois le faire manuellement ?
    J'avais pensé qu'il y avait une méthode.
    Ben la ListView peut pas deviner ce qu'elle doit faire... toi tu lui as juste ajouté des items avec des chaines de caractères, il n'y a pas de lien "automagique" avec les objets représentés par les ListViewItems. Donc c'est assez logique que tu sois obligé de le faire manuellement...

  19. #39
    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 : 42
    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 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Zhamy Voir le message
    Logique...
    Donc je dois cliquer sur le dossier pour le rafraichir?
    "à la mano"
    Ben non, il suffit que tu appelles le code qui est normalement exécuté quand tu cliques sur le dossier...

  20. #40
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 125
    Points : 63
    Points
    63
    Par défaut
    Ok, j'ai appelé la fonction FoldersView_MouseUp dans ma fonction ChangeToFullControl_Click :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.FoldersView_MouseUp(sender, new MouseEventArgs(Control.MouseButtons, 0, Control.MousePosition.X, Control.MousePosition.Y, 0);
    Mais étrange ça me vide la ListView... C'est pas une erreur de paramètre quand j'appelle la fonction ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Développement outil permission NTFS
    Par Zhamy dans le forum Windows
    Réponses: 1
    Dernier message: 06/04/2010, 11h21
  2. [WD11] Permissions NTFS
    Par WDKyle dans le forum WinDev
    Réponses: 7
    Dernier message: 06/07/2009, 09h29
  3. Permissions NTFS avec XP Home
    Par Loceka dans le forum Sécurité
    Réponses: 2
    Dernier message: 10/09/2006, 11h32
  4. [Architecture] Conseil pour développement appli Client/Serveur
    Par etiennegaloup dans le forum Développement Web en Java
    Réponses: 11
    Dernier message: 22/01/2006, 11h44
  5. Quelle Bdd pour développement appli commerciale
    Par cicko dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 21/09/2005, 16h00

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