.NET 4.x Проверка прав доступа к папке - C#
Формулировка задачи:
Прошу помощи. Необходимо в указаном пути перебрать папки на доступ к ней юзера.
А вот как сравнить, что пользователь имеет доступ на запись в директорию.
string abc;
Console.WriteLine("Введите диска");
abc = Console.ReadLine();
string drive = abc + @":\";
DirectoryInfo dir = new DirectoryInfo(drive); //тут я получил директорию где лежат папки
DirectoryInfo[] alldir = dir.GetDirectories();//получил все директории на диске
string nameuser = WindowsIdentity.GetCurrent().Name;
FileSystemAccessRule acr = new FileSystemAccessRule(nameuser, FileSystemRights.Write, AccessControlType.Allow);
foreach (DirectoryInfo name in alldir) //перебираем все папки в директории
{
DirectorySecurity ds = name.GetAccessControl(AccessControlSections.Access);//получаем права папокРешение задачи: «.NET 4.x Проверка прав доступа к папке»
textual
Листинг программы
string drive = abc + @":\";
DirectoryInfo dir = new DirectoryInfo(drive);
DirectoryInfo[] alldir = dir.GetDirectories();
WindowsIdentity wi = WindowsIdentity.GetCurrent();
foreach (DirectoryInfo name in alldir)
{
DirectorySecurity ds = name.GetAccessControl(AccessControlSections.Access);
AuthorizationRuleCollection rules = ds.GetAccessRules(true, true, typeof(SecurityIdentifier));
foreach (FileSystemAccessRule rl in rules)
{
SecurityIdentifier sid = (SecurityIdentifier)rl.IdentityReference;
if (((rl.FileSystemRights & FileSystemRights.WriteData) == FileSystemRights.WriteData))
{
if ((sid.IsAccountSid() && wi.User == sid) ||
(!sid.IsAccountSid() && wi.Groups.Contains(sid)))
{
if (rl.AccessControlType == AccessControlType.Allow)
{
Console.WriteLine("Доступ к папке {0} для пользователя - {1} разрешен", name.Name, wi.Name);
}
else
{
Console.WriteLine("Доступ к папке {0} для пользователя - {1} запрещен", name.Name, wi.Name);
}
}
}
}
}
Console.ReadLine();