Как я могу программным образом определить, есть ли у меня права на запись с использованием С# в .Net?

Как определить, есть ли у меня разрешение на запись на удаленном компьютере в моей интрасети, используя С# в .Net?

Ответ 1

Простым ответом было бы попробовать и посмотреть. API-интерфейсы безопасности Windows не для слабонервных, и возможно, у вас есть разрешение на запись без разрешения на просмотр разрешений!

Ответ 2

Там тоже было лучшее и самое надежное решение, которое я нашел:

bool hasWriteAccess = true;
string remoteFileName = "\\server\share\file.name"

try
{
    createRemoteFile(remoteFileName);   
}
catch (SystemSecurityException)
{
     hasWriteAccess = false;   
}

if (File.Exists(remoteFileName))
{
    File.Delete(remoteFileName);
}

return hasWriteAccess;

Ответ 3

Отправляй сообщение в этом форуме.

http://bytes.com/forum/thread389514.html

Он описывает использование объектов в пространстве имен System.Security.AccessControl, чтобы получить список разрешений ACL для файла. Он доступен только в .NET 2.0 и выше. Я думаю, он также предполагает, что у вас есть SMB-сеть. Я не уверен, что он сделал бы, если бы вы использовали сеть, отличную от Windows.

Если вы не на .NET 2.0 или выше, это обычный java-интерфейс pInvoke и Win32.

Ответ 4

ScottKoon пишет о проверке разрешений ACL Windows. Вы также можете проверить разрешенные управляемые коды с помощью CAS (Security Access Security). Это специальный метод ограничения доступа .Net. Обратите внимание: если у пользователя нет разрешений на запись, тогда код никогда не будет иметь разрешения на запись (даже если CAS говорит, что он это делает) - самые ограничительные разрешения между двумя победами.

CAS довольно прост в использовании - вы даже можете добавить декларативные атрибуты в начало ваших методов. Вы можете прочитать больше на MSDN