Соревнование
Учитывая строку, обозначающую символическую запись разрешения UNIX файла и его владельца (идентификатор пользователя и идентификатор группы), решите, есть ли у данного пользователя A
разрешение на чтение / запись / выполнение.
Разрешения в системе UNIX
В UNIX каждый файл имеет три класса разрешений ( пользователь , группа и другие ) и владельца, включая того, к какому пользователю и какой группе он принадлежит.
Символическая запись состоит из десяти символов. Первый персонаж не важен в этом вызове. Остальные девять символов находятся в трех наборах из трех символов, представляющих права пользователя, группы и других классов. Символы в каждом наборе указывают, разрешено ли чтение / запись / выполнение. Если разрешено, то это будет r
, w
или x
. Иначе так и будет -
.
Обратите внимание , что УИП , setgid и липкие бит может изменить третий символ каждого набора на s
, S
, t
или T
. Вот простое правило: если символ строчная буква, то разрешение установлено; в противном случае это не так.
(Подробнее о символьной записи разрешений см. Здесь .)
У каждого пользователя есть свой идентификатор пользователя, а у каждой группы - свой идентификатор группы. Все идентификаторы будут неотрицательными целыми числами. Пользователь будет принадлежать как минимум к одной группе. Если пользователь A
хочет получить доступ к файлу, система проверит его разрешения следующим образом:
Если файл принадлежит пользователю
A
, проверьте права доступа класса пользователя .Если файл не принадлежит
A
, ноA
принадлежит группе, к которой принадлежит файл, проверьте права доступа класса группы .В противном случае проверьте права доступа других классов.
Однако есть одно исключение: если идентификатор пользователя равен 0 (суперпользователь), у него есть разрешение на все !
Характеристики
- Ваша программа / функция должна принимать их как входные данные в любом приемлемом формате:
- Разрешения в символической записи .
- Идентификатор пользователя и группы, к которым принадлежит файл.
- Идентификатор пользователя
A
и список идентификаторов групп, к которымA
принадлежит. - Тип доступа. Вы можете использовать любые три различных однозначных или однозначных значения для чтения, записи и выполнения.
- Возвращает / выводит истинное значение, если у
A
него есть разрешение на доступ к файлу, или ложное значение, если нет. - Вы можете предположить, что первым символом обозначения всегда будет
-
(обычный файл). - Это код-гольф , поэтому побеждает самый короткий в байтах!
Тестовые случаи
Формат здесь такой [permissions, user ID of file, group ID of file, user ID of A, group IDs of A, type(r/w/x)]
.
[-rwx------, 13, 15, 13, [15, 24], r]: True # user
[-rwxr-xr-x, 13, 24, 24, [15, 24], w]: False # group
[-rwxr-Sr-T, 13, 15, 24, [15, 35], x]: False # group
[-rwsr-xr-t, 13, 15, 24, [24, 35], x]: True # others
[----------, 13, 15, 0, [0, 1, 2], r]: True # superuser
[----------, 13, 15, 1, [0, 1, 2], r]: False # others
[----rwxrwx, 13, 15, 13, [15, 24], r]: False # user