2015-09-01 1 views
1

У нас есть веб-служба asp.net mvc, которая должна иметь возможность проверять разрешения NTFS на сетевые папки и возвращать список только этих папок и файлов в пользовательский интерфейс, который пользователю разрешено просматривать. Мы не можем использовать олицетворение для этого. Как мы будем добиваться этого?Веб-служба должна проверить права доступа к файлам NTFS для пользователя

+1

Взгляните на это [вопрос] (http://stackoverflow.com/questions/3021698/effective-file-permissions-tools-api-in-windows) –

+0

@YacoubMassad Спасибо! Я посмотрю. – steveo

ответ

0

В решении этой проблемы я нашел этот вопрос полезным, но он не вполне соответствовал нашим потребностям:
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; 
     }