Если вам нужно проверить разрешение другого пользователя (да, я понимаю, что это противоречит вопросу, но может кому-то пригодится), вы можете сделать это через модуль pwd
, и биты режима каталога.
Отказ от ответственности - не работает в Windows, так как не использует модель разрешений POSIX (а модуль pwd
там недоступен), например, - решение только для * nix систем.
Обратите внимание, что в каталоге должны быть установлены все 3 бита - Read, Write и eXecute.
Хорошо, R не является обязательным условием, но без него вы не можете перечислить записи в каталоге (поэтому вы должны знать их имена). Выполнение, с другой стороны, абсолютно необходимо - без него пользователь не может прочитать иноды файла; таким образом, даже имея W, без X-файлов невозможно создать или изменить. Более подробное объяснение по этой ссылке.
Наконец, режимы доступны в модуле stat
, их описания находятся в inode (7) man .
Пример кода как проверить:
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