Como posso programaticamente determinar se eu tiver privilégios de gravação usando C # no .net?

StackOverflow https://stackoverflow.com/questions/137031

Pergunta

Como posso saber se tenho permissão de escrita em uma máquina remota na minha intranet usando C # no .net?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top