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

Erstelle ein Programm, das ein Benutzerauthentifizierungssystem verwaltet, indem es Benutzeranmeldedaten überprüft und Berechtigungsstufen kontrolliert. Dein Programm sollte:

  1. Eine Zeichenfolgeneingabe lesen, die den Namen des Systems darstellt
  2. Mehrere Eingabepaare lesen, die Benutzernamen und deren Berechtigungsstufen darstellen (die Eingabe endet, wenn du "users_done" erhältst)
  3. Eine Zeichenfolgeneingabe lesen, die den zu überprüfenden Benutzernamen darstellt
  4. Eine Zeichenfolgeneingabe lesen, die die zu überprüfende Berechtigungsstufe darstellt
  5. Eine Map erstellen, um Benutzernamen als Schlüssel und ihre Berechtigungsstufen als Werte zu speichern
  6. containsKey() verwenden, um zu überprüfen, ob der Benutzername im System existiert
  7. containsValue() verwenden, um zu überprüfen, ob die angegebene Berechtigungsstufe irgendwo im System existiert
  8. Die Authentifizierungsanalyse im unten gezeigten exakten Format ausgeben

Wenn der Systemname beispielsweise "Corporate Network" lautet, die Benutzer "alice" mit "admin", "bob" mit "editor", "charlie" mit "viewer" und "diana" mit "admin" enthalten, der zu überprüfende Benutzername "alice" ist und die zu überprüfende Berechtigungsstufe "admin" lautet, sollte dein 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" lautet, die Benutzer "teacher1" mit "instructor", "student1" mit "student" und "admin1" mit "administrator" enthalten, der zu überprüfende Benutzername "guest" ist und die zu überprüfende Berechtigungsstufe "student" lautet, sollte dein 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" lautet, die Benutzer "librarian" mit "staff", "member1" mit "member" und "member2" mit "member" enthalten, der zu überprüfende Benutzername "librarian" ist und die zu überprüfende Berechtigungsstufe "premium" lautet, sollte dein 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)

Dein Programm muss containsKey() verwenden, um zu überprüfen, ob der Benutzername existiert, und containsValue(), um zu überprüfen, ob die Berechtigungsstufe irgendwo im System existiert. Um zu überprüfen, ob der jeweilige Benutzer die jeweilige Berechtigung besitzt, vergleiche die tatsächliche Berechtigungsstufe des Benutzers mit der angeforderten. Bestimme die Sicherheitsstufe anhand der Ergebnisse: "High", wenn der Zugriff mit Berechtigungen vom Typ admin gewährt wird (admin, administrator, staff), "Medium", wenn der Benutzer existiert, aber falsche Berechtigungen besitzt, und "Low", wenn der Benutzer nicht existiert. Das Eingabeformat lautet: Systemname, anschließend abwechselnd Benutzernamen und Berechtigungsstufen, endend mit "users_done", gefolgt vom zu überprüfenden Benutzernamen und der zu überprüfenden Berechtigungsstufe.

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)" if access granted AND permission is admin, administrator, or staff
  //   - "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

Übe selbstständig: Online-Dart-Compiler