Wyzwanie
Biorąc pod uwagę ciąg znaków wskazujący symboliczną notację uprawnień UNIX do pliku i jego własności (identyfikator użytkownika i identyfikator grupy), zdecyduj, czy dany użytkownik A
ma uprawnienia do odczytu / zapisu / wykonania.
Związane .
Uprawnienia w systemie UNIX
W systemie UNIX każdy plik ma trzy klasy uprawnień ( użytkownik , grupa i inne ) oraz własność, w tym do którego użytkownika i do której grupy należy.
Zapis symboliczny składa się z dziesięciu znaków. Pierwsza postać nie jest ważna w tym wyzwaniu. Pozostałe dziewięć znaków składa się z trzech zestawów trzech znaków, reprezentujących uprawnienia klasy użytkownika, grupy i innych. Znaki w każdym zestawie wskazują, czy odczyt / zapis / wykonywanie jest dozwolone. Jeśli jest to dozwolone, to będzie r
, w
albo x
. W przeciwnym razie będzie -
.
Zauważ, że setuid , setgid i lepki bit może zmienić trzecią charakter każdego zestawu do s
, S
, t
lub T
. Oto prosta zasada: jeśli znak jest małymi literami, to uprawnienie jest ustawione; w przeciwnym razie tak nie jest.
(Szczegółowe informacje na temat symbolicznego zapisu uprawnień znajdują się tutaj .)
Każdy użytkownik ma swój identyfikator użytkownika, a każda grupa ma swój identyfikator grupy. Wszystkie identyfikatory będą liczbami całkowitymi nieujemnymi. Użytkownik będzie należeć do co najmniej jednej grupy. Jeśli użytkownik A
chce uzyskać dostęp do pliku, system sprawdzi swoje uprawnienia w następujący sposób:
Jeśli plik należy do użytkownika
A
, sprawdź uprawnienia klasy użytkownika .Jeśli plik nie należy
A
, aleA
należy do grupy, do której należy plik, sprawdź uprawnienia klasy grupy .W przeciwnym razie sprawdź uprawnienia innych klas.
Jest jednak jeden wyjątek: jeśli ID użytkownika to 0 (superużytkownik), mają uprawnienia do robienia czegokolwiek !
Dane techniczne
- Twój program / funkcja powinna przyjąć je jako dane wejściowe w dowolnym rozsądnym formacie:
- Uprawnienia w notacji symbolicznej .
- Identyfikator użytkownika i identyfikator grupy, do której należy plik.
- Identyfikator użytkownika
A
oraz lista identyfikatorów grup, do którychA
należy. - Rodzaj dostępu Możesz użyć dowolnych trzech różnych jednocyfrowych lub jednoznakowych wartości do odczytu, zapisu i wykonania.
- Zwraca / wyświetla prawdziwą wartość, jeśli
A
ma uprawnienia dostępu do pliku, lub wartość fałszowania, jeśli nie. - Możesz założyć, że pierwszym znakiem notacji będzie zawsze
-
(zwykły plik). - To jest golf golfowy , więc wygrywa najkrótsza bajt!
Przypadki testowe
Format jest tutaj [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
źródło
Java (OpenJDK 8) , 60 bajtów
Wypróbuj online!
Mapowanie typu jest następujące:
1
oznaczar
,2
oznaczaw
i3
oznaczax
.źródło
Pyth,
2221 bajtówWypróbuj online. Zestaw testowy.
Pobiera dane wejściowe jako sześć wierszy:
Wyjaśnienie
źródło