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