Frage zu Zugang zu views - Sicherheit

Django, Flask, Bottle, WSGI, CGI…
Antworten
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Die Lehrkraft kann sich nicht nur die ganze Arbeit der Lerngruppe anzeigen lassen (das war mein letztes Posting) sie kann auch die Ergebnisse jeder Schülerinnen /jedes Schüler aus seiner Gruppe anzeigen lassen (dazu gibt es 3 Möglichkeiten). Ich nehme mal als Beispiel das Protokoll. Bei Klick auf die entsprechende Anforderung übergebe ich die id der entsprechenden Schülerinnen / des entsprechenden Schülers, zB.: "...protokoll/152/". Auf diese Seite darf jetzt aber natürlich nur die Schülerinnen / der Schüler bzw deren Lehrkraft zuweisen und nicht irgendjeamn, der die ids ausprobiert. Je nachdem, wer zugreift, gibt es verschiedene Möglichkeiten: Der Lehrer darf z.B. seine eigenen Aufgaben löschen, die von Schülerinnen bzw. Schüler nicht. Dazu habe ich in jedem View (ich habe dieses Problem ja mehrmals) eine Abfrage eingebaut, die z.B. beim Protokoll so aussieht:

Code: Alles auswählen

def protokoll(req, schueler_id=0):
    if req.user.is_authenticated:
        if User.objects.filter(pk=req.user.id, groups__name='Lehrer').exists():
            lehrer = True
        else:
            lehrer = False
        loeschen = False 
        if schueler_id == 0:
            user = get_object_or_404(Profil, user_id = req.user.id)
            if lehrer:
                loeschen = True            
        else:
            user = get_object_or_404(Profil, id = schueler_id)
        protokoll = Protokoll.objects.filter(user=user).order_by('id').reverse()
        ...
Ich habe jetzt keine Idee, ob das so sinnvoll ist, oder ob es möglicherweise eine einfachere Idee dazu gibt.
Vielleicht muss ich noch anmerken, dass die Lehrkraft (ich habe keine Lust, immer "die Lehrerin bzw. der Lehrer" zu schreiben kann auch selbst die Aufgaben ausprobieren und daher auch das Protokoll seiner eigenen Aufgaben anzeigen lassen.
(Bevor jetzt jemand schreibt, er benötigte mehr code - ich poste gerne mehr.)
Benutzeravatar
__blackjack__
User
Beiträge: 13109
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Pitwheazle: Randbemerkung: Wenn man aufgrund einer Bedingung einen Namen an True oder False bindet, dann ist das unnötig umständlich das über ein ``if``/``else`` zu machen, denn bei der Bedingung kommt doch bereits ein passender Wahrheitswert heraus:

Code: Alles auswählen

        if User.objects.filter(pk=req.user.id, groups__name="Lehrer").exists():
            lehrer = True
        else:
            lehrer = False
        
        # =>

        lehrer = User.objects.filter(pk=req.user.id, groups__name="Lehrer").exists()
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Pitwheazle
User
Beiträge: 873
Registriert: Sonntag 19. September 2021, 09:40

Prima! Ich kann noch viel lernen!
Antworten