La sfida
Data una stringa che indica la notazione simbolica dell'autorizzazione UNIX di un file e la sua proprietà (ID utente e ID gruppo), decidere se un determinato utente Adispone dell'autorizzazione per leggerlo / scriverlo / eseguirlo.
Autorizzazioni nel sistema UNIX
In UNIX, ogni file ha tre classi di autorizzazioni ( utente , gruppo e altri ) e proprietà, incluso l'utente e il gruppo a cui appartiene.
La notazione simbolica è composta da dieci caratteri. Il primo personaggio non è importante in questa sfida. I rimanenti nove caratteri sono in tre set di tre caratteri, che rappresentano le autorizzazioni dell'utente, del gruppo e di altre classi. I caratteri in ogni set indicano se è consentita la lettura / scrittura / esecuzione. Se consentito, sarà r, wo x. Altrimenti lo sarà -.
Si noti che setuid , setgid e sticky bit può cambiare il terzo carattere di ciascun insieme a s, S, to T. Ecco una semplice regola: se il personaggio è una lettera minuscola, viene impostata l'autorizzazione; altrimenti non lo è.
(Per i dettagli sulla notazione simbolica delle autorizzazioni, fare riferimento qui .)
Ogni utente ha il suo ID utente e ogni gruppo ha il suo ID gruppo. Tutti gli ID saranno numeri interi non negativi. Un utente apparterrà ad almeno un gruppo. Se un utente Adesidera accedere a un file, il sistema controllerà le proprie autorizzazioni come segue:
Se il file appartiene all'utente
A, controllare le autorizzazioni della classe utente .Se il file non appartiene
A, maAappartiene al gruppo a cui appartiene il file, controllare le autorizzazioni della classe di gruppo .Altrimenti, controlla le autorizzazioni di altre classi.
Tuttavia, c'è un'eccezione: se l'ID utente è 0 (superutente), hanno il permesso di fare qualsiasi cosa !
specificazioni
- Il tuo programma / funzione dovrebbe prenderli come input in qualsiasi formato ragionevole:
- Autorizzazioni in notazione simbolica .
- ID utente e ID gruppo a cui appartiene il file.
- L'ID utente di
Ae un elenco di ID gruppo a cuiAappartiene. - Tipo di accesso. È possibile utilizzare tre diversi valori di una cifra o di un carattere per leggere, scrivere ed eseguire.
- Restituisce / genera un valore veritiero se
Aha il permesso di accedere al file, oppure un valore falso in caso contrario. - Si può presumere che il primo carattere della notazione sarà sempre
-(file normale). - Questo è code-golf , quindi vince il byte più corto!
Casi test
Il formato qui è [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