All work and no play makes Jack a dull boy

quarta-feira, 16 de outubro de 2013

Verifica se usuário está no grupo

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.

Nenhum comentário:

Postar um comentário