Как я могу программно определить, есть ли у меня права на запись с использованием C # в .Net? - PullRequest
5 голосов
/ 26 сентября 2008

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

Ответы [ 4 ]

6 голосов
/ 26 сентября 2008

Простой ответ - попробовать и посмотреть. API безопасности Windows не для слабонервных, и, возможно, у вас есть разрешение на запись без разрешения для просмотра разрешений!

4 голосов
/ 26 сентября 2008

Также там было найдено самое лучшее и надежное решение:

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 голосов
/ 26 сентября 2008

Проверьте это сообщение на форуме.

http://bytes.com/forum/thread389514.html

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

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

1 голос
/ 26 сентября 2008

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

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

...