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

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

4 ответа

Решение

Простой ответ - попробовать и посмотреть. 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

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

Если вы не используете.NET 2.0 или выше, это обычный джаз pInvoke и Win32 API.

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

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

Другие вопросы по тегам