Como verificar se o usuário está em um grupo específico no Django? E como fazer isso em forma de
decorator?
Vamos lá:
from django.contrib.auth.decorators import user_passes_test
def esta_no_grupo_Alunos(user):
return user.is_authenticated() and not user.groups.filter(name='Alunos').exists()
@user_passes_test(esta_no_grupo_Alunos, login_url='/login/')
def nome_da_view(request):
# código da sua view
Use com o
user_passes_test para restringir acesso a usuários autenticados e que estejam no grupo.
O
decorator user_passes_test tem um argumento obrigatório: um objeto User e retorna
True, caso o usuário tenha permissão. Como user_passes_test não verifica automaticamente se o usuário está logado, então foi necessário incluir essa verificação.
Como bem notou
Luan Fonseca, no Facebook, perceba que, para o caso de redirecionar para login, você pode muito bem usar o
decorator @login_required antes do
user_passes_test e remover o is_authenticated() da função.