Système de vérification d'accès multicouche avec interfaces

Go Hard interfaces

Tâche «Système de vérification d'accès multicouche avec interfaces»

Implémentez un système de vérification d'accès aux ressources utilisant des interfaces. Définissez l'interface AccessChecker avec les méthodes CheckAccess(resource string, user string) bool et GetPermissions(resource string) []string. Implémentez trois structures : AdminAccess (retourne toujours true et la liste de toutes les permissions contenant 'admin'), UserAccess (vérifie la présence de l'utilisateur dans la liste autorisée pour la ressource et retourne les permissions commençant par 'user_'), GuestAccess (vérifie que la ressource fait partie de la liste publique et retourne la permission 'read' si accessible). Implémentez ensuite la fonction CreateAccessChecker(accessType string, config map[string]interface{}) (AccessChecker, error), qui crée l'objet correspondant selon la chaîne accessType ('admin', 'user', 'guest') et la configuration. Entrée : d'abord un entier N (1..100) — le nombre de requêtes. Ensuite N lignes de la forme : accessType resource user. Après cela, une ligne avec la configuration : pour admin — une chaîne vide ; pour user — une chaîne de la forme 'resource1:user1,user2;resource2:user3' ; pour guest — une chaîne de la forme 'resource1;resource2'. Pour chaque requête, affichez 'allowed' ou 'denied'. Si accessType est inconnu, affichez 'unknown type'.

Format d\ entrée

N (nombre entier)
N lignes : accessType resource user
ligne de configuration

Format de sortie

N lignes : 'allowed' ou 'denied' ou 'unknown type'

Exemples

Exemple 1

ENTRÉE
3 admin secret admin user docs alice guest public bob
SORTIE
allowed denied denied

Exemple 2

ENTRÉE
2 admin vault eve user reports john resource1:alice,bob;resource2:charlie
SORTIE
allowed denied

Exemple 3

ENTRÉE
1 2 3 4 5 6 7 8 9 10
SORTIE
unknown type

Exemple 4

ENTRÉE
1 superuser root root
SORTIE
unknown type

Exemple 5

ENTRÉE
-1 2 3 -4 5 6 -7 8 -9 10
SORTIE
unknown type
main.go