Le défi
Étant donné une chaîne indiquant la notation symbolique de l'autorisation UNIX d'un fichier et sa propriété (ID utilisateur et ID de groupe), décidez si un utilisateur donné A
est autorisé à le lire / écrire / l'exécuter.
Connexes .
Autorisations dans le système UNIX
Sous UNIX, chaque fichier possède trois classes d'autorisations ( utilisateur , groupe et autres ) et de propriété, y compris à quel utilisateur et à quel groupe il appartient.
La notation symbolique se compose de dix caractères. Le premier personnage n'est pas important dans ce défi. Les neuf caractères restants sont répartis en trois ensembles de trois caractères, représentant les autorisations des utilisateurs, des groupes et des autres classes. Les caractères de chaque ensemble indiquent si la lecture / l'écriture / l'exécution est autorisée. Si cela est permis, ce sera le cas r
, w
ou x
. Sinon, ça le sera -
.
Notez que setuid , setgid et peu collante peut changer le troisième caractère de chaque ensemble s
, S
, t
ou T
. Voici une règle simple: si le caractère est une lettre minuscule, alors l'autorisation est définie; sinon, ce n'est pas le cas.
(Pour les détails de la notation symbolique des autorisations, veuillez vous référer ici .)
Chaque utilisateur a son ID utilisateur et chaque groupe a son ID de groupe. Tous les ID seront des entiers non négatifs. Un utilisateur appartiendra à au moins un groupe. Si un utilisateur A
souhaite accéder à un fichier, le système vérifiera ses autorisations comme suit:
Si le fichier appartient à l'utilisateur
A
, vérifiez les autorisations de la classe d' utilisateurs .Si le fichier n'appartient pas
A
, maisA
appartient au groupe auquel il appartient, vérifiez les autorisations de la classe de groupe .Sinon, vérifiez les autorisations des autres classes.
Cependant, il y a une exception: si l'ID utilisateur est 0 (superutilisateur), ils ont l'autorisation de faire quoi que ce soit !
Caractéristiques
- Votre programme / fonction doit les prendre en entrée dans n'importe quel format raisonnable:
- Autorisations en notation symbolique .
- ID utilisateur et ID groupe auquel appartient le fichier.
- L'ID utilisateur de
A
, et une liste des ID de groupe auxquelsA
appartient. - Type d'accès. Vous pouvez utiliser trois valeurs différentes à un chiffre ou à un caractère pour la lecture, l'écriture et l'exécution.
- Renvoie / affiche une valeur véridique si elle
A
a l'autorisation d'accéder au fichier, ou une valeur fausse si ce n'est pas le cas. - Vous pouvez supposer que le premier caractère de la notation sera toujours
-
(fichier normal). - Il s'agit de code-golf , donc le plus court en octets gagne!
Cas de test
Le format est ici [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
la source
Java (OpenJDK 8) , 60 octets
Essayez-le en ligne!
Le mappage pour le type est le suivant:
1
moyensr
,2
moyensw
et3
moyensx
.la source
Pyth,
2221 octetsEssayez-le en ligne. Suite de tests.
Prend l'entrée en six lignes:
Explication
la source