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

StackOverflow https://stackoverflow.com/questions/137031

Вопрос

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top