Si necesita verificar el permiso de otro usuario (sí, me doy cuenta de que esto contradice la pregunta, pero puede ser útil para alguien), puede hacerlo a través del pwd
módulo y los bits de modo del directorio.
Descargo de responsabilidad : no funciona en Windows, ya que no usa el modelo de permisos POSIX (y el pwd
módulo no está disponible allí), por ejemplo: solución solo para sistemas * nix.
Tenga en cuenta que un directorio debe tener todos los 3 bits establecidos: lectura, escritura y eXecute.
Ok, R no es una necesidad absoluta, pero sin ella no puede enumerar las entradas en el directorio (por lo que debe saber sus nombres). Por otro lado, ejecutar es absolutamente necesario, sin que el usuario no pueda leer los inodos del archivo; por lo que incluso teniendo W, sin X, los archivos no se pueden crear ni modificar. Explicación más detallada en este enlace.
Finalmente, los modos están disponibles en el stat
módulo, sus descripciones están en inode (7) man .
Código de muestra cómo verificar:
import pwd
import stat
import os
def check_user_dir(user, directory):
dir_stat = os.stat(directory)
user_id, group_id = pwd.getpwnam(user).pw_uid, pwd.getpwnam(user).pw_gid
directory_mode = dir_stat[stat.ST_MODE]
# use directory_mode as mask
if user_id == dir_stat[stat.ST_UID] and stat.S_IRWXU & directory_mode == stat.S_IRWXU: # owner and has RWX
return True
elif group_id == dir_stat[stat.ST_GID] and stat.S_IRWXG & directory_mode == stat.S_IRWXG: # in group & it has RWX
return True
elif stat.S_IRWXO & directory_mode == stat.S_IRWXO: # everyone has RWX
return True
# no permissions
return False