У нас есть веб-служба asp.net mvc, которая должна иметь возможность проверять разрешения NTFS на сетевые папки и возвращать список только этих папок и файлов в пользовательский интерфейс, который пользователю разрешено просматривать. Мы не можем использовать олицетворение для этого. Как мы будем добиваться этого?Веб-служба должна проверить права доступа к файлам NTFS для пользователя
ответ
В решении этой проблемы я нашел этот вопрос полезным, но он не вполне соответствовал нашим потребностям:
Effective file permissions tool's api in windows. Спасибо @YacoubMassad за то, что он указал мне в этом направлении. Используя этот код, я создал эффективную службу разрешений для проверки разрешений на чтение, но у меня возникла непредвиденная проблема. Служба будет работать правильно для папок, для которых у пользователя были разрешения на просмотр, но это неправильно возвратило бы true
другим, потому что оно не возвращало маску для них. В результате моя служба отобразила список папок, на которые пользователь не был допущен к просмотру. Я предполагаю, что я мог изменить свое обслуживание, чтобы решить эту проблему, но это осложнялось.
Решение, с которым я пошел, не так элегантно, но просто и эффективно. Я написал метод, который вызывает GetDirectories()
для каждого каталога. Для каждого каталога, который успешно выполняется GetDirectories()
, путь добавляется в список, который возвращается в представление. Поскольку наши разрешения обрабатываются на уровне каталогов, это было настолько далеко, насколько мне нужно было идти. Я обрабатываю любые файлы UnauthorizedAccessExceptions
на файлах, на всякий случай, когда разрешения устанавливаются на этом уровне.
public IList<FilePathObject> PopulateAuthorizedPathList()
{
IList<FilePathObject> authorizedPathList = new List<FilePathObject>();
foreach (FilePathObject pathObject in fullPathList)
{
var dir = new DirectoryInfo(pathObject.FullPath);
if (dir.Exists)
{
try
{
var info = dir.GetDirectories();
authorizedPathList.Add(pathObject);
}
catch (UnauthorizedAccessException ex)
{
}
}
}
return authorizedPathList;
}
Взгляните на это [вопрос] (http://stackoverflow.com/questions/3021698/effective-file-permissions-tools-api-in-windows) –
@YacoubMassad Спасибо! Я посмотрю. – steveo