Как я могу программно определить, есть ли у меня права на запись, используя C # в .Net?
-
02-07-2019 - |
Вопрос
Как я могу определить, есть ли у меня разрешение на запись на удаленном компьютере в моей интрасети, используя C # в .Net?
Решение
Простым ответом было бы попробовать и посмотреть.API-интерфейсы безопасности Windows не для слабонервных, и, возможно, у вас есть разрешение на запись без разрешения на просмотр разрешений!
Другие советы
Я тоже был там, и лучшим и наиболее надежным решением, которое я нашел, было следующее:
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;
Ознакомьтесь с этим сообщением на форуме.
http://bytes.com/forum/thread389514.html
В нем описывается использование объектов в Система.Безопасность.Управление доступом пространство имен для получения списка разрешений ACL для файла.Он доступен только в .NET 2.0 и выше.Я думаю, это также предполагает, что у вас есть сеть SMB.Я не уверен, что бы это сделало, если бы вы использовали сеть, отличную от Windows.
Если вы не используете .NET 2.0 или выше, это обычный PInvoke и Win32 API jazz.
Скотткун пишет о проверке разрешений ACL для Windows.Вы также можете проверить разрешения на управляемый код с помощью CAS (безопасность доступа к коду).Это .Специфичный для сети метод ограничения разрешений.Обратите внимание, если у пользователя нет прав на запись, то у кода никогда не будет прав на запись (даже если CAS говорит, что это так) - выигрывают самые ограничительные разрешения между двумя.
CAS довольно прост в использовании - вы даже можете добавить декларативные атрибуты в начале своих методов.Вы можете прочитать больше по адресу MSDN