Como posso programaticamente determinar se eu tiver privilégios de gravação usando C # no .net?
-
02-07-2019 - |
Pergunta
Como posso saber se tenho permissão de escrita em uma máquina remota na minha intranet usando C # no .net?
Solução
A resposta simples seria a de tentar e ver. As APIs de segurança do Windows não são para os fracos de coração, e pode ser possível que você tem permissão de gravação sem ter permissão para visualizar as permissões!
Outras dicas
Já esteve lá também, o melhor e mais confiável solução que encontrei foi esta:
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;
Confira este post no fórum.
http://bytes.com/forum/thread389514.html
Ele descreve usando os objetos na System.Security.AccessControl namespace para obter uma lista das permissões de ACL para um arquivo. Só está disponível no .NET 2.0 e superior. Penso que também pressupõe que você tenha uma rede SMB. Eu não tenho certeza o que faria se estivesse usando uma rede não-Windows.
Se você não estiver em .NET 2.0 ou superior, é o habitual pInvoke e Win32 jazz API.
ScottKoon é escrita sobre a verificação das janelas permissões ACL. Você também pode verificar as permissões de código gerenciado usando CAS (Code Access Security). Este é um método específico .Net restringir permissões. Note, se o usuário não tem permissões de gravação, em seguida, o código nunca terá permissão de escrita (mesmo CAS diz que faz.) - o maior número de permissões restritivas entre os dois win
CAS é muito fácil de usar - você pode até mesmo adicionar declarativas atributos que o início de seus métodos. Você pode ler mais em MSDN