Come posso determinare a livello di codice se ho i privilegi di scrittura usando C # in .Net?

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

Domanda

Come posso determinare se ho l'autorizzazione in scrittura su un computer remoto nella mia intranet usando C # in .Net?

È stato utile?

Soluzione

La semplice risposta sarebbe provarla e vedere. Le API di sicurezza di Windows non sono per i deboli di cuore e potrebbe essere possibile che tu abbia l'autorizzazione di scrittura senza avere l'autorizzazione per visualizzare le autorizzazioni!

Altri suggerimenti

Anche lì, la soluzione migliore e più affidabile che ho trovato è stata questa:

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;

Dai un'occhiata a questo post sul forum.

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

Descrive l'utilizzo degli oggetti in Spazio dei nomi System.Security.AccessControl per ottenere un elenco delle autorizzazioni ACL per un file. È disponibile solo in .NET 2.0 e versioni successive. Penso anche che tu abbia una rete SMB. Non sono sicuro di cosa farebbe se si utilizzasse una rete non Windows.

Se non sei su .NET 2.0 o versioni successive, è il solito jazz pInvoke e Win32 API.

ScottKoon scrive del controllo delle autorizzazioni ACL di Windows. Puoi anche controllare le autorizzazioni del codice gestito usando CAS (Code Access Security). Questo è un metodo specifico .Net per limitare le autorizzazioni. Nota, se l'utente non ha i permessi di scrittura, il codice non avrà mai i permessi di scrittura (anche se CAS lo dice) - i permessi più restrittivi tra i due vincono.

CAS è piuttosto facile da usare: puoi persino aggiungere attributi dichiarativi all'inizio dei tuoi metodi. Puoi leggere di più su MSDN

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top