Pracuję nad dużą aplikacją Django, do której większość wymaga logowania, aby uzyskać dostęp. Oznacza to, że w całej naszej aplikacji posypaliśmy:
@login_required
def view(...):
W porządku i działa świetnie, o ile pamiętamy o dodawaniu go wszędzie ! Niestety czasami zapominamy, a niepowodzenie często nie jest tak ewidentne. Jeśli jedyny link do widoku znajduje się na stronie @login_required, prawdopodobnie nie zauważysz, że możesz uzyskać dostęp do tego widoku bez logowania. Ale złoczyńcy mogą to zauważyć, co jest problemem.
Mój pomysł polegał na odwróceniu systemu. Zamiast wpisywać @login_required wszędzie, zamiast tego miałbym coś takiego:
@public
def public_view(...):
Tylko do spraw publicznych. Próbowałem zaimplementować to za pomocą oprogramowania pośredniczącego i nie mogłem go uruchomić. Myślę, że wszystko, co próbowałem, źle współdziałało z innym oprogramowaniem pośredniczącym, którego używamy. Następnie próbowałem napisać coś, aby przejść przez wzorce adresów URL, aby sprawdzić, czy wszystko, co nie jest @public, zostało oznaczone jako @login_required - przynajmniej wtedy otrzymywaliśmy szybki błąd, gdybyśmy czegoś zapomnieli. Ale potem nie mogłem dowiedzieć się, jak stwierdzić, czy @login_required został zastosowany do widoku ...
Więc jaki jest właściwy sposób, aby to zrobić? Dzięki za pomoc!