Die Herausforderung
Entscheiden Sie anhand einer Zeichenfolge, die die symbolische Notation der UNIX-Berechtigung einer Datei und deren Besitz (Benutzer-ID und Gruppen-ID) angibt, ob ein bestimmter Benutzer A
die Berechtigung zum Lesen / Schreiben / Ausführen hat.
Berechtigungen im UNIX-System
Unter UNIX verfügt jede Datei über drei Berechtigungsklassen ( Benutzer , Gruppe und andere ) und Eigentümer, einschließlich des Benutzers und der Gruppe, zu der sie gehört.
Die symbolische Notation besteht aus zehn Zeichen. Der erste Charakter ist bei dieser Herausforderung nicht wichtig. Die verbleibenden neun Zeichen bestehen aus drei Sätzen mit jeweils drei Zeichen, die die Berechtigungen von Benutzer, Gruppe und anderen Klassen darstellen. Zeichen in jedem Satz geben an, ob Lesen / Schreiben / Ausführen zulässig ist. Wenn erlaubt, wird es sein r
, w
oder x
. Sonst wird es sein -
.
Beachten Sie, dass setuid , setgid und Sticky - Bit kann das dritte Zeichen eines jeden Satzes ändern s
, S
, t
oder T
. Hier ist eine einfache Regel: Wenn das Zeichen ein Kleinbuchstabe ist, wird die Berechtigung festgelegt. sonst ist es nicht.
(Einzelheiten zur symbolischen Notation von Berechtigungen finden Sie hier .)
Jeder Benutzer hat seine Benutzer-ID und jede Gruppe hat ihre Gruppen-ID. Alle IDs sind nicht negative Ganzzahlen. Ein Benutzer gehört mindestens einer Gruppe an. Wenn ein Benutzer A
Zugriff auf eine Datei erhalten möchte, überprüft das System seine Berechtigungen wie folgt:
Wenn die Datei dem Benutzer gehört
A
, überprüfen Sie die Berechtigungen der Benutzerklasse .Wenn die Datei nicht , gehören tut
A
, sondernA
gehört zu der Gruppe , die die Datei gehört, überprüfen Sie die Berechtigungen der Gruppe Klasse.Überprüfen Sie andernfalls die Berechtigungen anderer Klassen.
Es gibt jedoch eine Ausnahme: Wenn die Benutzer-ID 0 (Superuser) ist, haben sie die Berechtigung, etwas zu tun !
Spezifikationen
- Ihr Programm / Ihre Funktion sollte diese als Eingabe in einem angemessenen Format verwenden:
- Berechtigungen in symbolischer Notation .
- Benutzer-ID und Gruppen-ID, zu der die Datei gehört.
- Die Benutzer-ID von
A
und eine Liste der Gruppen-IDs, die dazuA
gehören. - Art des Zugriffs. Sie können drei verschiedene einstellige oder einstellige Werte zum Lesen, Schreiben und Ausführen verwenden.
- Geben Sie einen Wahrheitswert zurück / geben Sie ihn aus, wenn Sie berechtigt sind
A
, auf die Datei zuzugreifen, oder einen Falschwert, wenn nicht. - Sie können davon ausgehen, dass das erste Zeichen der Notation immer
-
(reguläre Datei) ist. - Dies ist Code-Golf , also gewinnt das kürzeste Byte!
Testfälle
Das Format hier ist [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
quelle
Java (OpenJDK 8) , 60 Bytes
Probieren Sie es online aus!
Die Zuordnung für den Typ lautet wie folgt:
1
Mittelr
,2
Mittelw
und3
Mittelx
.quelle
Pyth,
2221 BytesProbieren Sie es online aus. Testsuite.
Nimmt die Eingabe als sechs Zeilen entgegen:
Erläuterung
quelle