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