2009-12-26 5 views
0

Hey les gars, j'écris une application qui récupère les noms de groupe et les autorisations d'accès pour chaque groupe NT peuplé de la boucle foreach. En outre, j'ai inclus un contrôle DataGridView où chaque cellule a une colonne de case à cocher, l'application va vérifier chaque cellule en conséquence, par exemple lire, écrire, modifier, etc pour chaque groupe. Je ne peux pas pour la vie de moi, comprendre comment vérifier ces cases en conséquence. L'extrait de code ci-dessous illustre ce que j'essaie de faire avec une colonne de zone de contrôle DataGridView standard, mais je voudrais faire ces cases à cocher plutôt que des zones de texte. Tous commentaires serait grandement apprécié. Dans l'extrait de code ci-dessous, la propriété est le chemin transmis depuis une autre méthode.DataGridView CheckBox Question

private void CheckDirPermissions(ResultProperty Property) 
    { 
     if (Property.Type == typeof(string) && !Property.IsArray) 
     { 
      try 
      { 
       FileSecurity folderSecurity = File.GetAccessControl(Property.String); 
       foreach (FileSystemAccessRule fileSystemAccessRule in folderSecurity.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount))) 
       { 



        string IdentityReference = fileSystemAccessRule.IdentityReference.ToString(); 
        string AccessControlType = fileSystemAccessRule.AccessControlType.ToString(); 
        string filesystemrights = fileSystemAccessRule.FileSystemRights.ToString(); 
        string IsInherited = fileSystemAccessRule.IsInherited.ToString(); 




        DataGridDirPermissions.Rows.Add(IdentityReference, 
                filesystemrights,          
                AccessControlType, 
                IsInherited); 

       } 
      } 
      catch (Exception) 
      { 
       MessageBox.Show("Path does not exist.", "Path Not Found", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
     } 
     else return; 
    } 

Répondre

1

Vous devez définir la lecture, d'écriture, Modifier, etc. colonnes de votre DataGridView de type DataGridViewCheckBoxColumn. Ensuite, lorsque vous lisez les autorisations pour chaque groupe, vous pouvez obtenir les valeurs booléennes correspondantes pour chaque autorisation et de créer la ligne avec ces valeurs:

foreach (FileSystemAccessRule fileSystemAccessRule in folderSecurity.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount))) 
{ 
    string IdentityReference = fileSystemAccessRule.IdentityReference.ToString(); 

    AccessControlType accessControlType = fileSystemAccessRule.AccessControlType; 
    FileSystemRights filesystemrights = fileSystemAccessRule.FileSystemRights; 
    bool isInherited = fileSystemAccessRule.IsInherited; 

    // .. Get specific permissions ... 

    bool allowControlType = accessControlType == AccessControlType.Allow; 
    bool canRead = (filesystemrights & FileSystemRights.Read) == FileSystemRights.Read; 
    bool canWrite = (filesystemrights & FileSystemRights.Write) == FileSystemRights.Write; 
    bool canExecute = (filesystemrights & FileSystemRights.ExecuteFile) == FileSystemRights.ExecuteFile; 

    // ... Any more specific permissions ... 

    dataGridView1.Rows.Add(IdentityReference, allowControlType, canRead, canWrite, canExecute, ...); 
} 

De cette façon, votre DataGridView aura le nom du groupe dans la première cellule (comme une zone de texte) et un CheckBox pour chaque autorisation spécifique, comme:

Everyone     (check)  (check)  (no check) (no check) 
BUILTIN\Administrators  (check)  (check)  (check)  (check) 
BUILTIN\Users    (check)  (check)  (check)  (no check) 

et ainsi de suite ...

+0

Cela fonctionne parfaitement. Merci beaucoup Alexphi – Sanch01R