Estou trabalhando em um grande aplicativo Django, a grande maioria dos quais requer um login para acessar. Isso significa que em todo o nosso aplicativo espalhamos:
@login_required
def view(...):
Tudo bem e funciona muito bem , desde que nos lembremos de adicioná-lo em todos os lugares ! Infelizmente, às vezes esquecemos, e a falha muitas vezes não é terrivelmente evidente. Se o único link para uma visualização estiver em uma página @login_required, você provavelmente não perceberá que pode realmente acessar essa visualização sem fazer login. Mas os bandidos podem perceber, o que é um problema.
Minha ideia era reverter o sistema. Em vez de digitar @login_required em todos os lugares, eu teria algo como:
@public
def public_view(...):
Apenas para as coisas públicas. Tentei implementar isso com algum middleware e não consegui fazer funcionar. Tudo o que experimentei interagiu mal com outro middleware que estamos usando, eu acho. Em seguida, tentei escrever algo para percorrer os padrões de URL para verificar se tudo o que não é @public foi marcado como @login_required - pelo menos, obteríamos um erro rápido se esquecêssemos algo. Mas não consegui descobrir como saber se @login_required tinha sido aplicado a uma visualização ...
Então, qual é a maneira certa de fazer isso? Obrigado pela ajuda!