Как определить, есть ли у меня разрешение на запись на удаленном компьютере в моей интрасети с использованием C# в .Net?Как я могу программным образом определить, есть ли права на запись с использованием C# в .Net?
ответ
Простым ответом было бы попробовать и посмотреть. API безопасности Windows не для слабонервных, и, возможно, у вас есть разрешение на запись без разрешения на просмотр разрешений!
Отметьте это сообщение форума.
http://bytes.com/forum/thread389514.html
Он описывает использование объектов в System.Security.AccessControl пространства имен, чтобы получить список разрешений ACL для файла. Он доступен только в .NET 2.0 и выше. Я думаю, он также предполагает, что у вас есть SMB-сеть. Я не уверен, что он сделал бы, если бы вы использовали сеть, отличную от Windows.
Если вы не используете .NET 2.0 и выше, это обычный java-интерфейс pInvoke и Win32 API.
ScottKoon пишет о проверке разрешений ACL Windows. Вы также можете проверить разрешенные управляемые коды с помощью CAS (Security Access Security). Это специальный метод ограничения доступа .Net. Обратите внимание: если у пользователя нет разрешений на запись, тогда код никогда не будет иметь права на запись (даже если CAS говорит, что он это делает) - самые ограничительные разрешения между двумя победами.
CAS довольно прост в использовании - вы даже можете добавить декларативные атрибуты в начале ваших методов. Вы можете прочитать больше на MSDN
Были там тоже самое лучшее и самое надежное решение, которое я нашел, было это:
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;
Помните, что это возможно для пользователей Windows, чтобы иметь права на запись в файл или папку, но НЕ имеет разрешения на удаление для этого (с записью, но НЕ модифицировать) – hromanko 2008-12-05 20:34:06