2015-06-23 3 views
0

Мне нужно проверить разрешения чтения/записи по определенному пути. Но большая проблема в том, что я не хочу проверять свои собственные, а не Я хочу проверить их для другого пользователя.C# Как получить права на чтение/запись другого пользователя?

Это проверяет пользователя, который запускает программу.

System.Security.Principal.NTAccount

Как я смог проверить, например пользователем "OTHERUSER"?

Это мой код.

private Boolean CheckZugriff(string str_projektpfad) 
    { 
     str_projektpfad = Path.GetDirectoryName(str_projektpfad); 
     bool isWriteAccess = false; 
     try 
     { 
      AuthorizationRuleCollection collection = Directory.GetAccessControl(str_projektpfad).GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)); 
      foreach (FileSystemAccessRule rule in collection) 
      { 
       if (rule.AccessControlType == AccessControlType.Allow) 
       { 
        isWriteAccess = true; 
        break; 
       } 
      } 
     } 
     catch (UnauthorizedAccessException ex) 
     { 
      isWriteAccess = false; 
     } 
     catch (Exception ex) 
     { 
      isWriteAccess = false; 

     } 
     if (!isWriteAccess) 
     { 
      //handle notifications     
     } 

     return isWriteAccess; 
    } 
+0

Не могли бы вы рассказать нам что-то о Directory.GetAccessControl? –

ответ

1

Найдено две вещи, которые могут помочь вам ...

1) Этот код проверяет, что набор разрешений для папки для всех пользователей: если

string directory = "your path"; 

    DirectoryInfo di = new DirectoryInfo(directory); 

    DirectorySecurity ds = di.GetAccessControl(); 

2) Этот код проверяет У пользователя есть права администратора:

bool isElevated; 
WindowsIdentity identity = new WindowsIdentity("user principal name goes here"); 
WindowsPrincipal principal = new WindowsPrincipal(identity); 
isElevated = principal.IsInRole(WindowsBuiltInRole.Administrator); 

Это логично, что если пользователь не является администратором и не существует r ule для него - он не может получить доступ к папке. Не уверен, что это касается вашей проблемы, но надеюсь, что это поможет.

+0

Это просто помогает немного не то, что мне нужно, потому что ваш код даст мне всех пользователей. Могу ли я перекрестно проверять всех пользователей с использованием, которое я хочу? Как 'ds' собирается мне помочь? Что я должен делать с 'ds'? –

+0

Не уверен, что это возможно с вашим подходом. С другой стороны, теперь вы можете получить разрешения на чтение/запись для всех пользователей, и не должно быть большой проблемой найти правила разрешения, установленные для одного конкретного пользователя, не так ли? Это хорошая отправная точка. – Fabjan

+0

Возможно, я глуп, но как я могу использовать 'ds', чтобы делать то, что вы только что сказали? –

Смежные вопросы