Menu
Coddy logo textTech

Prüfen auf Schlüssel und Werte

Teil des Abschnitts Logik & Ablauf der Dart-Journey von Coddy — Lektion 27 von 65.

Bevor Sie auf Daten in einer Map zugreifen, ist es wichtig zu überprüfen, ob der Schlüssel oder der Wert, nach dem Sie suchen, tatsächlich existiert. Dart bietet hierfür zwei Methoden an: containsKey() und containsValue().

Die Methode containsKey() prüft, ob ein bestimmter Schlüssel in der Map existiert, und gibt true zurück, falls er gefunden wurde, andernfalls false. Dies ist besonders nützlich, bevor versucht wird, auf einen Wert zuzugreifen, und hilft Ihnen dabei, potenzielle Fehler zu vermeiden.

Map<String, String> userPermissions = {
  'user123': 'admin',
  'user456': 'editor',
  'user789': 'viewer'
};

bool hasUser = userPermissions.containsKey('user123');
print(hasUser);  // true

bool hasUnknownUser = userPermissions.containsKey('user999');
print(hasUnknownUser);  // false

Ebenso prüft containsValue(), ob ein bestimmter Wert irgendwo in der Map existiert. Diese Methode durchsucht alle Werte und gibt true zurück, wenn sie eine Übereinstimmung findet.

bool hasAdmin = userPermissions.containsValue('admin');
print(hasAdmin);  // true

Diese Methoden sind entscheidend für das Schreiben von sicherem Code, der fehlende Daten elegant verarbeitet und so Laufzeitfehler beim Arbeiten mit dynamischen Map-Inhalten verhindert.

challenge icon

Aufgabe

Einfach

Erstellen Sie ein Programm, das ein Benutzerauthentifizierungssystem verwaltet, indem es Benutzeranmeldedaten verifiziert und Berechtigungsstufen überprüft. Ihr Programm sollte:

  1. Einen String-Input einlesen, der den Systemnamen darstellt
  2. Mehrere Paare von Eingaben einlesen, die Benutzernamen und deren Berechtigungsstufen darstellen (die Eingabe endet, wenn Sie "users_done" erhalten)
  3. Einen String-Input einlesen, der den zu prüfenden Benutzernamen darstellt
  4. Einen String-Input einlesen, der die zu verifizierende Berechtigungsstufe darstellt
  5. Eine Map erstellen, um Benutzernamen als Schlüssel und deren Berechtigungsstufen als Werte zu speichern
  6. containsKey() verwenden, um zu prüfen, ob der Benutzername im System existiert
  7. containsValue() verwenden, um zu prüfen, ob die angegebene Berechtigungsstufe irgendwo im System existiert
  8. Die Authentifizierungsanalyse im unten gezeigten exakten Format ausgeben

Wenn zum Beispiel der Systemname "Corporate Network" ist, die Benutzer "alice" mit "admin", "bob" mit "editor", "charlie" mit "viewer", "diana" mit "admin" umfassen, der zu prüfende Benutzername "alice" ist und die zu verifizierende Berechtigungsstufe "admin" ist, sollte Ihr Programm Folgendes ausgeben:

System: Corporate Network
User Database: {alice: admin, bob: editor, charlie: viewer, diana: admin}
Authentication Check:
Username 'alice' exists: true
Permission 'admin' exists in system: true
User 'alice' has permission 'admin': true
Access Status: GRANTED - User authenticated with valid permissions
Security Level: High (admin access detected)

Wenn der Systemname "School Portal" ist, die Benutzer "teacher1" mit "instructor", "student1" mit "student", "admin1" mit "administrator" umfassen, der zu prüfende Benutzername "guest" ist und die zu verifizierende Berechtigungsstufe "student" ist, sollte Ihr Programm Folgendes ausgeben:

System: School Portal
User Database: {teacher1: instructor, student1: student, admin1: administrator}
Authentication Check:
Username 'guest' exists: false
Permission 'student' exists in system: true
User 'guest' has permission 'student': false
Access Status: DENIED - Username not found in system
Security Level: Low (user not registered)

Wenn der Systemname "Library System" ist, die Benutzer "librarian" mit "staff", "member1" mit "member", "member2" mit "member" umfassen, der zu prüfende Benutzername "librarian" ist und die zu verifizierende Berechtigungsstufe "premium" ist, sollte Ihr Programm Folgendes ausgeben:

System: Library System
User Database: {librarian: staff, member1: member, member2: member}
Authentication Check:
Username 'librarian' exists: true
Permission 'premium' exists in system: false
User 'librarian' has permission 'premium': false
Access Status: DENIED - Permission level not available
Security Level: Medium (valid user, invalid permission)

Ihr Programm muss containsKey() verwenden, um zu verifizieren, ob der Benutzername existiert, und containsValue(), um zu prüfen, ob die Berechtigungsstufe irgendwo im System existiert. Um zu prüfen, ob der spezifische Benutzer die spezifische Berechtigung hat, vergleichen Sie die tatsächliche Berechtigungsstufe des Benutzers mit der angeforderten. Bestimmen Sie die Sicherheitsstufe basierend auf den Ergebnissen: "High", wenn der Zugriff mit Berechtigungen vom Typ Admin gewährt wird (admin, administrator, staff), "Medium", wenn der Benutzer existiert, aber die falschen Berechtigungen hat, und "Low", wenn der Benutzer nicht existiert. Das Eingabeformat ist: Systemname, dann abwechselnd Benutzernamen und Berechtigungsstufen, endend mit "users_done", gefolgt von dem zu prüfenden Benutzernamen und der zu verifizierenden Berechtigungsstufe.

Spickzettel

Verwenden Sie containsKey(), um zu prüfen, ob ein bestimmter Schlüssel in einer Map existiert:

Map<String, String> userPermissions = {
  'user123': 'admin',
  'user456': 'editor',
  'user789': 'viewer'
};

bool hasUser = userPermissions.containsKey('user123');
print(hasUser);  // true

Verwenden Sie containsValue(), um zu prüfen, ob ein bestimmter Wert irgendwo in einer Map existiert:

bool hasAdmin = userPermissions.containsValue('admin');
print(hasAdmin);  // true

Beide Methoden geben true zurück, wenn der Eintrag gefunden wurde, und andernfalls false, was hilft, Laufzeitfehler beim Arbeiten mit dynamischen Map-Inhalten zu vermeiden.

Probier es selbst

import 'dart:io';

void main() {
  // Systemnamen lesen
  String? systemName = stdin.readLineSync();
  
  // Erstelle eine Map, um Benutzernamen und deren Berechtigungsstufen zu speichern
  Map<String, String> userDatabase = {};
  
  // Benutzerdaten lesen bis "users_done"
  while (true) {
    String? input = stdin.readLineSync();
    if (input == "users_done") {
      break;
    }
    String username = input!;
    String? permission = stdin.readLineSync();
    userDatabase[username] = permission!;
  }
  
  // Zu prüfenden Benutzernamen und zu verifizierende Berechtigungsstufe lesen
  String? usernameToCheck = stdin.readLineSync();
  String? permissionToVerify = stdin.readLineSync();
  
  // TODO: Schreibe deinen Code unten
  // Verwende containsKey(), um zu prüfen, ob der Benutzername existiert
  // Verwende containsValue(), um zu prüfen, ob die Berechtigungsstufe im System existiert
  // Prüfe, ob der spezifische Benutzer die spezifische Berechtigung hat
  // Bestimme den Zugriffsstatus und die Sicherheitsstufe:
  //   - "High (admin access detected)", wenn Zugriff gewährt UND Berechtigung admin, administrator oder staff ist
  //   - "Medium (standard access)", wenn Zugriff gewährt, aber Berechtigung kein Admin-Typ ist
  //   - "Medium (valid user, invalid permission)", wenn Benutzer existiert, aber die falsche Berechtigung hat
  //   - "Low (user not registered)", wenn Benutzer nicht existiert
  
  // Die Authentifizierungsanalyse ausgeben
  print("System: $systemName");
  print("User Database: $userDatabase");
  print("Authentication Check:");
  // Füge hier deine Ausgabeanweisungen hinzu
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf