2009-12-26 6 views
0

Привет, ребята, я пишу приложение, которое извлекает имена групп и разрешения доступа для каждой группы NT, заполненной из цикла foreach. Кроме того, я включил элемент управления DataGridView, где каждая ячейка имеет столбец флажка, приложение будет проверять каждую ячейку соответственно, например, читать, записывать, изменять и т. Д. Для каждой группы. Я не могу для жизни меня, выяснить, как проверить эти коробки соответственно. В приведенном ниже фрагменте кода показано, что я пытаюсь сделать со стандартным столбцом текстового поля управления DataGridView, но я хотел бы сделать эти флажки, а не текстовые поля. Любая обратная связь будет принята с благодарностью. В фрагменте кода ниже Property - путь, который передается из другого метода.DataGridView CheckBox Вопрос

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; 
    } 

ответ

1

Вы должны определить чтение, запись, изменение и т.д. столбцы вашего DataGridView типа DataGridViewCheckBoxColumn. Затем, когда вы читаете разрешения для каждой группы, вы можете получить соответствующие логические значения для каждого разрешения и создать строку с этими значениями:

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, ...); 
} 

Таким образом, ваш DataGridView будет иметь имя группы в первой ячейке (как TextBox) и CheckBox для каждого конкретного разрешения, как:

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

и так далее ...

+0

Это прекрасно работает. Большое спасибо Alexphi – Sanch01R