Menu
Coddy logo textTech

Sprawdzanie kluczy i wartości

Część sekcji Logika i przepływ sterowania ścieżki Dart w Coddy. Lekcja 27 z 65.

Przed uzyskaniem dostępu do danych w Map należy sprawdzić, czy szukany klucz lub wartość rzeczywiście istnieje. Dart udostępnia do tego dwie metody: containsKey() i containsValue().

Metoda containsKey() sprawdza, czy w mapie istnieje określony klucz. Zwraca true, jeśli go znajdzie, a w przeciwnym razie false. Jest to szczególnie przydatne przed próbą uzyskania dostępu do wartości i pomaga uniknąć potencjalnych błędów.

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

Podobnie containsValue() sprawdza, czy określona wartość znajduje się gdziekolwiek w mapie. Ta metoda przeszukuje wszystkie wartości i zwraca true, jeśli znajdzie dopasowanie.

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

Te metody są kluczowe przy pisaniu bezpiecznego kodu, który płynnie obsługuje brakujące dane, zapobiegając błędom w czasie wykonywania podczas pracy z dynamiczną zawartością mapy.

challenge icon

Wyzwanie

Łatwy

Utwórz program, który zarządza systemem uwierzytelniania użytkowników, weryfikując dane logowania i sprawdzając poziomy uprawnień. Twój program powinien:

  1. Wczytać ciąg znaków reprezentujący nazwę systemu
  2. Wczytać wiele par danych wejściowych reprezentujących nazwy użytkowników i ich poziomy uprawnień (wczytywanie zakończy się po otrzymaniu "users_done")
  3. Wczytać ciąg znaków reprezentujący nazwę użytkownika do sprawdzenia
  4. Wczytać ciąg znaków reprezentujący poziom uprawnień do zweryfikowania
  5. Utworzyć Mapę do przechowywania nazw użytkowników jako kluczy, a ich poziomów uprawnień jako wartości
  6. Użyć containsKey(), aby sprawdzić, czy użytkownik istnieje w systemie
  7. Użyć containsValue(), aby sprawdzić, czy określony poziom uprawnień istnieje w systemie
  8. Wypisać analizę uwierzytelniania w dokładnym formacie pokazanym poniżej

Na przykład, jeśli nazwa systemu to "Corporate Network", użytkownicy to między innymi "alice" z uprawnieniami "admin", "bob" z uprawnieniami "editor", "charlie" z uprawnieniami "viewer" oraz "diana" z uprawnieniami "admin", nazwą użytkownika do sprawdzenia jest "alice", a poziomem uprawnień do zweryfikowania jest "admin", program powinien wypisać:

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)

Jeśli nazwa systemu to "School Portal", użytkownicy to między innymi "teacher1" z uprawnieniami "instructor", "student1" z uprawnieniami "student" oraz "admin1" z uprawnieniami "administrator", nazwą użytkownika do sprawdzenia jest "guest", a poziomem uprawnień do zweryfikowania jest "student", program powinien wypisać:

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)

Jeśli nazwa systemu to "Library System", użytkownicy to między innymi "librarian" z uprawnieniami "staff", "member1" z uprawnieniami "member" oraz "member2" z uprawnieniami "member", nazwą użytkownika do sprawdzenia jest "librarian", a poziomem uprawnień do zweryfikowania jest "premium", program powinien wypisać:

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)

Twój program musi używać containsKey(), aby sprawdzić, czy użytkownik istnieje, oraz containsValue(), aby sprawdzić, czy dany poziom uprawnień istnieje w systemie. Aby sprawdzić, czy dany użytkownik ma określone uprawnienie, porównaj jego rzeczywisty poziom uprawnień z żądanym poziomem. Określ poziom bezpieczeństwa na podstawie wyników: "High", jeśli dostęp zostanie przyznany z uprawnieniami typu administratora (admin, administrator, staff), "Medium", jeśli użytkownik istnieje, ale ma nieprawidłowe uprawnienia, oraz "Low", jeśli użytkownik nie istnieje. Format danych wejściowych będzie następujący: nazwa systemu, następnie naprzemiennie nazwy użytkowników i poziomy uprawnień, zakończone przez "users_done", a potem nazwa użytkownika do sprawdzenia i poziom uprawnień do zweryfikowania.

Spróbuj swoich sił

import 'dart:io';

void main() {
  // Wczytaj nazwę systemu
  String? systemName = stdin.readLineSync();
  
  // Utwórz Map do przechowywania nazw użytkowników i ich poziomów uprawnień
  Map<String, String> userDatabase = {};
  
  // Wczytuj dane użytkowników aż do "users_done"
  while (true) {
    String? input = stdin.readLineSync();
    if (input == "users_done") {
      break;
    }
    String username = input!;
    String? permission = stdin.readLineSync();
    userDatabase[username] = permission!;
  }
  
  // Wczytaj nazwę użytkownika do sprawdzenia i poziom uprawnień do zweryfikowania
  String? usernameToCheck = stdin.readLineSync();
  String? permissionToVerify = stdin.readLineSync();
  
  // TODO: Napisz swój kod poniżej
  // Użyj containsKey(), aby sprawdzić, czy nazwa użytkownika istnieje
  // Użyj containsValue(), aby sprawdzić, czy poziom uprawnień istnieje w systemie
  // Sprawdź, czy dany użytkownik ma dane uprawnienie
  // Ustal status dostępu i poziom bezpieczeństwa:
  //   - "High (admin access detected)", jeśli przyznano dostęp ORAZ uprawnienie to admin, administrator, lub staff
  //   - "Medium (standard access)", jeśli przyznano dostęp, ale uprawnienie nie jest typu admin
  //   - "Medium (valid user, invalid permission)", jeśli użytkownik istnieje, ale ma niewłaściwe uprawnienie
  //   - "Low (user not registered)", jeśli użytkownik nie istnieje
  
  // Wyświetl analizę uwierzytelniania
  print("System: $systemName");
  print("User Database: $userDatabase");
  print("Authentication Check:");
  // Dodaj tutaj instrukcje wyświetlające wyniki
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Dart online