¿Cómo puedo determinar mediante programación si tengo privilegios de escritura utilizando C # en .Net?

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

Pregunta

¿Cómo puedo determinar si tengo permiso de escritura en una máquina remota en mi intranet usando C # en .Net?

¿Fue útil?

Solución

La respuesta simple sería probarlo y ver. ¡Las API de seguridad de Windows no son para los débiles de corazón, y es posible que tenga permiso de escritura sin tener permiso para ver los permisos!

Otros consejos

También he estado allí, la mejor y más confiable solución que encontré fue 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;

Echa un vistazo a esta publicación del foro.

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

Describe el uso de los objetos en System.Security.AccessControl espacio de nombres para obtener una lista de los permisos de ACL para un archivo. Solo está disponible en .NET 2.0 y superior. Creo que también supone que tienes una red SMB. No estoy seguro de qué haría si estuviera usando una red que no es de Windows.

Si no está en .NET 2.0 o superior, es el habitual pInvoke y Win32 API jazz.

ScottKoon se escribe sobre la comprobación de los permisos de ACL de Windows. También puede verificar los permisos del código administrado usando CAS (Seguridad de acceso al código). Este es un método específico de .Net para restringir permisos. Tenga en cuenta que si el usuario no tiene permisos de escritura, el código nunca tendrá permisos de escritura (incluso si CAS lo dice), los permisos más restrictivos entre los dos ganadores.

CAS es bastante fácil de usar, incluso puede agregar atributos declarativos al inicio de sus métodos. Puede leer más en MSDN

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top