Come posso determinare a livello di codice se ho i privilegi di scrittura usando C # in .Net?
-
02-07-2019 - |
Domanda
Come posso determinare se ho l'autorizzazione in scrittura su un computer remoto nella mia intranet usando C # in .Net?
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