Sto lavorando a una grande app Django, la maggior parte della quale richiede un login per accedere. Ciò significa che in tutta la nostra app abbiamo cosparso:
@login_required
def view(...):
Va bene e funziona benissimo fintanto che ci ricordiamo di aggiungerlo ovunque ! Purtroppo a volte ci dimentichiamo e il fallimento spesso non è particolarmente evidente. Se l'unico collegamento a una visualizzazione è su una pagina @login_required, è improbabile che tu possa notare che puoi effettivamente raggiungere quella visualizzazione senza effettuare il login. Ma i malintenzionati potrebbero notare, il che è un problema.
La mia idea era di invertire il sistema. Invece di dover digitare @login_required ovunque, invece avrei qualcosa del tipo:
@public
def public_view(...):
Solo per cose pubbliche. Ho provato a implementarlo con un middleware e non riuscivo a farlo funzionare. Tutto ciò che ho provato ha interagito male con altri middleware che stiamo utilizzando, credo. Successivamente ho provato a scrivere qualcosa per attraversare i pattern URL per verificare che tutto ciò che non è @public fosse contrassegnato con @login_required - almeno allora avremmo ricevuto un rapido errore se ci fossimo dimenticati qualcosa. Ma poi non sono riuscito a capire come capire se @login_required fosse stato applicato a una vista ...
Allora, qual è il modo giusto per farlo? Grazie per l'aiuto!