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

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

26.09.2008 00:08:45
4 ОТВЕТА
РЕШЕНИЕ

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

6
26.09.2008 00:28:16

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

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

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

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

3
26.09.2008 00:41:21

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

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

1
26.09.2008 01:14:15

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

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;
4
15.10.2008 07:07:57
Помните, что для пользователя Windows возможно ИМЕТЬ права на запись в файл или папку, но НЕ имеет разрешения на удаление (с записью, но НЕ изменяет)
hromanko 5.12.2008 20:34:06