Как определить, есть ли у меня разрешение на запись на удаленном компьютере в моей интрасети, используя С# в .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