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