Кажется, что разрешения для папки отображаются только в корневой папке, но не в подкаталогах этой корневой папки.
При тестировании приложения я получаю корневую папку и отображаю разрешения для папки.Однако он также отображает права доступа к подкаталогам в корневой папке, где я хотел бы, чтобы они отображались в подкаталогах.Я искал много форумов и не смог найти решение
Это код, который у меня есть для загрузки каталога и получения разрешений для папки:
public void LoadDirectory(string Dir)
{
DirectoryInfo di = new DirectoryInfo(Dir);
TreeNode tds = ad_treeView_view.Nodes.Add(di.Name);
tds.Tag = di.FullName;
tds.StateImageIndex = 0;
LoadFiles(Dir, tds);
LoadSubDirectories(Dir, tds);
DirectorySecurity acl = di.GetAccessControl();
AuthorizationRuleCollection rules = acl.GetAccessRules(true, true, typeof(NTAccount));
WindowsIdentity currentUser = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(currentUser);
foreach (AuthorizationRule rule in rules)
{
FileSystemAccessRule fsAccessRule = rule as FileSystemAccessRule;
if (fsAccessRule == null)
continue;
if ((fsAccessRule.FileSystemRights & FileSystemRights.FullControl) > 0)
{
NTAccount ntAccount = rule.IdentityReference as NTAccount;
if (ntAccount == null)
{
continue;
}
if (principal.IsInRole(ntAccount.Value))
{
tds = ad_treeView_view.Nodes.Add("Current user is in role of {0}, has full access", ntAccount.Value);
continue;
}
tds = ad_treeView_view.Nodes.Add("Current user is not in role of {0}, does not have full access", ntAccount.Value);
}
ad_progressBar_prg.Maximum = Directory.GetFiles(Dir, "*.*", SearchOption.AllDirectories).Length + Directory.GetDirectories(Dir, "**", SearchOption.AllDirectories).Length;
}
}
И для подкаталогов у меня есть следующий код:
private void LoadSubDirectories(string dir, TreeNode td)
{
// Get all subdirectories
string[] subdirectoryEntries = Directory.GetDirectories(dir);
// Loop through them to see if they have any other subdirectories
foreach (string subdirectory in subdirectoryEntries)
{
DirectoryInfo di = new DirectoryInfo(subdirectory);
TreeNode tds = td.Nodes.Add(di.Name);
tds.Tag = di.FullName;
tds.StateImageIndex = 0;
LoadSubDirectories(subdirectory, tds);
UpdateProgress();
DirectorySecurity acl = di.GetAccessControl();
AuthorizationRuleCollection rules = acl.GetAccessRules(true, true, typeof(NTAccount));
WindowsIdentity currentUser = WindowsIdentity.GetCurrent();
WindowsPrincipal principal = new WindowsPrincipal(currentUser);
foreach (AuthorizationRule rule in rules)
{
FileSystemAccessRule fsAccessRule = rule as FileSystemAccessRule;
if (fsAccessRule == null)
continue;
if ((fsAccessRule.FileSystemRights & FileSystemRights.FullControl) > 0)
{
NTAccount ntAccount = rule.IdentityReference as NTAccount;
if (ntAccount == null)
{
continue;
}
if (principal.IsInRole(ntAccount.Value))
{
ad_treeView_view.Nodes.Add("Current user is in role of {0}, has full access", ntAccount.Value);
continue;
}
ad_treeView_view.Nodes.Add("Current user is not in role of {0}, does not have full access", ntAccount.Value);
}
}
}
}
Итак, чтобы привести пример загрузки каталога с разрешениями:
+ Folder 1
|
|--My-PC\Administrator
|--My-PC\User
И когда я пытаюсь загрузить подкаталоги, я получаю следующее:
+ Folder 1
|
|--+Folder 2
|--+Folder 3
|
|--My-PC\Administrator
|--My-PC\User
|--My-PC\Administrator
|--My-PC\User
|--My-PC\Administrator
|--My-PC\User
Что бы я хотелдостичь:
+ Folder 1
|
|--+Folder 2
| |
| |--My-PC\Administrator
| |--My-PC\User
|
|--+Folder 3
| |
| |--My-PC\Administrator
| |--My-PC\User
|
|--My-PC\Administrator
|--My-PC\User