LU05.A11 - Decorator mit Benutzerobjekten

Erstellen Sie einen Decorator mit Parametern, der eine Funktion nur dann ausführt, wenn das Berechtigungslevel des Benutzers ausreicht.

Aufgabenstellung

Ihr Ziel ist es, einen Decorator namens check_permission zu schreiben. Der Decorator nimmt einen Parameter required_permission und führt die dekorierte Funktion nur aus, wenn das Berechtigungslevel des Benutzerobjekts (user.permission_level) gleich oder höher als required_permission ist. Sie sollten auch eine Benutzerklasse User erstellen, die eine Eigenschaft für das Berechtigungslevel hat.

Code Vorlage

main.py
class User:
    def __init__(self, username, permission_level):
        self.username = username
        self.permission_level = permission_level
 
def check_permission(required_permission):
    """
    Ein Decorator, der das Berechtigungslevel des Benutzers überprüft.
    Druckt f'{user.username} hat nicht genügend Berechtigungen.', wenn das Berechtigungslevel nicht ausreicht.
 
    Args:
        required_permission (int): Das erforderliche Berechtigungslevel.
 
    Returns:
        function: Eine dekorierte Funktion, die nur ausgeführt wird, wenn das Berechtigungslevel ausreicht.
    """
    # TODO: Ihr Code hier
    ...
 
@check_permission(2)
def view_profile(user):
    print(f"{user.username} kann das Profil anzeigen.")
 
@check_permission(4)
def edit_profile(user):
    print(f"{user.username} kann das Profil bearbeiten.")
 
# Testen Sie Ihren Decorator
if __name__ == '__main__':
    alice = User('Alice', 3)
    bob = User('Bob', 1)
 
    view_profile(alice)
    edit_profile(alice)
    view_profile(bob)
    edit_profile(bob)

Vorgehen

  1. Akzeptiere das GitHub Classroom Assignment
  2. Klone dein persönliches Repository in die Entwicklungsumgebung
  3. Implementiere die Benutzerklasse User und den Decorator check_permission gemäß der Anleitung

Abgabe

Die Abgabe der Lösung erfolgt als Push in das persönliche GitHub-Repository.


⇒ GitHub Repo für externe Besucher

GitHub Repository https://github.com/templates-python/m323-lu05-a11-decorator2

Lernende am BZZ müssen den Link zum GitHub Classroom Assignment verwenden

© Kevin Maurizi