El reto
Dada una cadena que indica la notación simbólica del permiso UNIX de un archivo y su propiedad (ID de usuario e ID de grupo), decida si un usuario dado A
tiene permiso para leerlo / escribirlo / ejecutarlo.
Permisos en el sistema UNIX
En UNIX, cada archivo tiene tres clases de permisos ( usuario , grupo y otros ) y propiedad, incluido a qué usuario y a qué grupo pertenece.
La notación simbólica consta de diez caracteres. El primer personaje no es importante en este desafío. Los nueve caracteres restantes se encuentran en tres conjuntos de tres caracteres, que representan permisos de usuario, grupo y otros. Los caracteres en cada conjunto indican si la lectura / escritura / ejecución está permitida. Si está permitido, será r
, w
o x
. De lo contrario, lo será -
.
Tenga en cuenta que setuid , setgid y sticky bit puede modificar el tercer carácter de cada conjunto a s
, S
, t
o T
. Aquí hay una regla simple: si el carácter es letra minúscula, entonces se establece el permiso; de lo contrario, no lo es.
(Para obtener detalles sobre la notación simbólica de los permisos, consulte aquí ).
Cada usuario tiene su ID de usuario y cada grupo tiene su ID de grupo. Todos los ID serán enteros no negativos. Un usuario pertenecerá al menos a un grupo. Si un usuario A
desea obtener acceso a un archivo, el sistema verificará sus permisos de la siguiente manera:
Si el archivo pertenece al usuario
A
, verifique los permisos de la clase de usuario .Si el archivo no pertenece
A
, peroA
pertenece al grupo al que pertenece el archivo, verifique los permisos de la clase de grupo .De lo contrario, verifique los permisos de la clase de otros .
Sin embargo, hay una excepción: si el ID de usuario es 0 (superusuario), ¡tienen permiso para hacer cualquier cosa !
Especificaciones
- Su programa / función debe tomar estos como entrada en cualquier formato razonable:
- Permisos en notación simbólica .
- ID de usuario e ID de grupo al que pertenece el archivo.
- El ID de usuario
A
y una lista de ID de grupo a la queA
pertenece. - Tipo de acceso. Puede usar tres valores diferentes de un dígito o un carácter para leer, escribir y ejecutar.
- Devuelve / genera un valor verdadero si
A
tiene permiso para acceder al archivo, o un valor falso si no. - Puede suponer que el primer carácter de la notación siempre será
-
(archivo normal). - Este es el código de golf , por lo que gana el más corto en bytes.
Casos de prueba
El formato aquí es [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
fuente
Java (OpenJDK 8) , 60 bytes
Pruébalo en línea!
La asignación para el tipo es la siguiente:
1
mediasr
,2
mediasw
y3
mediasx
.fuente
Pyth,
2221 bytesPruébalo en línea. Banco de pruebas.
Toma la entrada como seis líneas:
Explicación
fuente