Я работаю над приложением, которое работает как специальный непривилегированный пользователь. Я хотел бы иметь возможность легко проверить, может ли пользователь прочитать данный файл. Кажется, что это должно быть легко, даже когда я захожу в файл в Проводнике Windows и вижу, что проверяется разрешение на чтение, иногда кажется, что все еще есть что-то, что мешает пользователю прочитать файл (например, родительский каталог, пользователь не может просматривать), когда я пытаюсь читать его как пользователя программным путем.Что такое хороший способ проверить, может ли конкретный пользователь получить доступ к определенному файлу?
У пользователя нет разрешения на вход в консоль, поэтому я не могу просто войти в систему как пользователь и попытаться прочитать файл.
Итак ...
Если я хочу знать, «Есть ли UserBob
доступ к файлу c:\specialPath\specialFile
, что легкий способ узнать? Кстати, моя среда Windows Server 2003.
UPDATE: для уточнения, я хочу сделать что-то вроде этого:
if UserHasAccess(UserBob, @"c:\specialPath\specialFile") { doStuff(); } else { // error handling }
ОБНОВЛЕНИЕ:
Я получил один ответ, предлагая, что я просто пытаюсь открыть файл. Проблема в том, что код, который открывает файл, запускается под специальной системной учетной записью и инкапсулируется в другую библиотеку. Поэтому позвольте мне спросить: как я могу сделать свой код, который пытается открыть файл, запускаемый как специальная системная учетная запись. Предположим, что у меня есть доступ администратора к машине, на которой будет работать код.
Хорошо, я должен быть более конкретным. Я работаю с кодом .net. Есть ли простой способ попробовать открыть файл как «UserBob»? –
Является ли UserBob * другим * пользователем пользователя, на котором работает ваше приложение? –
Да, codeka, 'UserBob' отличается от пользователя, использующего приложение. По сути, как UserBob, так и пользователь, запускающий приложение, могут быть «системными» учетными записями без привилегий прямого входа в систему. Я хотел бы иметь некоторый код, который говорит что-то вроде: если UserHasAccess (UserBob, @ "C: \ specialPath \ specialFile") { DoStuff(); } еще { // обработка } –