Mehrstufiges Zugriffsprüfungssystem mit Schnittstellen
Go
Hard
interfaces
Aufgabe «Mehrstufiges Zugriffsprüfungssystem mit Schnittstellen»
Implementieren Sie ein System zur Zugriffsprüfung auf Ressourcen unter Verwendung von Schnittstellen. Definieren Sie die Schnittstelle AccessChecker mit den Methoden CheckAccess(resource string, user string) bool und GetPermissions(resource string) []string. Implementieren Sie drei Strukturen: AdminAccess (gibt immer true und eine Liste aller Berechtigungen zurück, die 'admin' enthalten), UserAccess (prüft, ob der Benutzer in der Liste der Zugelassenen für die Ressource vorhanden ist, und gibt Berechtigungen zurück, die mit 'user_' beginnen), GuestAccess (prüft, ob die Ressource in der Liste der öffentlich zugänglichen enthalten ist, und gibt die Berechtigung 'read' zurück, wenn sie verfügbar ist). Implementieren Sie anschließend die Funktion CreateAccessChecker(accessType string, config map[string]interface{}) (AccessChecker, error), die anhand der Zeichenkette accessType ('admin', 'user', 'guest') und der Konfiguration das entsprechende Objekt erstellt. Eingabe: zuerst eine ganze Zahl N (1..100) – die Anzahl der Anfragen. Dann N Zeilen der Form: accessType resource user. Danach eine Zeile mit der Konfiguration: für admin – eine leere Zeile; für user – eine Zeile der Form 'resource1:user1,user2;resource2:user3'; für guest – eine Zeile der Form 'resource1;resource2'. Geben Sie für jede Anfrage 'allowed' oder 'denied' aus. Wenn der accessType unbekannt ist, geben Sie 'unknown type' aus.
Eingabeformat
N (ganze Zahl)
N Zeilen: accessType resource user
Konfigurationszeile
Ausgabeformat
N Zeilen: 'allowed' oder 'denied' oder 'unknown type'
Beispiele
Beispiel 1
EINGABE
3
admin secret admin
user docs alice
guest public bob
AUSGABE
allowed
denied
denied
Beispiel 2
EINGABE
2
admin vault eve
user reports john
resource1:alice,bob;resource2:charlie
AUSGABE
allowed
denied
Beispiel 3
EINGABE
1 2 3 4 5
6 7 8 9 10
AUSGABE
unknown type
Beispiel 4
EINGABE
1
superuser root root
AUSGABE
unknown type
Beispiel 5
EINGABE
-1 2 3 -4 5
6 -7 8 -9 10
AUSGABE
unknown type
main.go