Sistema de verificación de acceso multinivel con interfaces

Go Hard interfaces

Tarea «Sistema de verificación de acceso multinivel con interfaces»

Implemente un sistema de verificación de acceso a recursos utilizando interfaces. Defina la interfaz AccessChecker con los métodos CheckAccess(resource string, user string) bool y GetPermissions(resource string) []string. Implemente tres estructuras: AdminAccess (siempre devuelve true y una lista de todos los permisos que contienen 'admin'), UserAccess (verifica la presencia del usuario en la lista de permitidos para el recurso y devuelve los permisos que comienzan con 'user_'), GuestAccess (verifica que el recurso esté en la lista de acceso público y devuelve el permiso 'read' si está disponible). A continuación, implemente la función CreateAccessChecker(accessType string, config map[string]interface{}) (AccessChecker, error), que según la cadena accessType ('admin', 'user', 'guest') y la configuración crea el objeto correspondiente. Entrada: primero un número entero N (1..100) — la cantidad de solicitudes. Luego N líneas del tipo: accessType resource user. Después, una línea con la configuración: para admin — una línea vacía; para user — una línea del tipo 'resource1:user1,user2;resource2:user3'; para guest — una línea del tipo 'resource1;resource2'. Para cada solicitud, muestre 'allowed' o 'denied'. Si accessType es desconocido, muestre 'unknown type'.

Formato de entrada

N (número entero)
N líneas: accessType resource user
línea de configuración

Formato de salida

N líneas: 'allowed' o 'denied' o 'unknown type'

Ejemplos

Ejemplo 1

ENTRADA
3 admin secret admin user docs alice guest public bob
SALIDA
allowed denied denied

Ejemplo 2

ENTRADA
2 admin vault eve user reports john resource1:alice,bob;resource2:charlie
SALIDA
allowed denied

Ejemplo 3

ENTRADA
1 2 3 4 5 6 7 8 9 10
SALIDA
unknown type

Ejemplo 4

ENTRADA
1 superuser root root
SALIDA
unknown type

Ejemplo 5

ENTRADA
-1 2 3 -4 5 6 -7 8 -9 10
SALIDA
unknown type
main.go