2015-10-14 2 views
3

Начиная со следующей точки зрения:Джанго брекет - Войти и группы требуется

from braces.views import GroupRequiredMixin, LoginRequiredMixin 

class AddAttributeView(LoginRequiredMixin, GroupRequiredMixin, FormView): 
    group_required = "SchemaAdmin" 
    ... 

Я хочу, чтобы достичь следующего:

  1. Если пользователь не вошел в систему -> перенаправить пользователя для входа страница
  2. Если пользователь вошел в систему и не имеет права: забросить 403

с конфигурацией выше , пользователь всегда перенаправляется на страницу входа в систему (даже если он зарегистрирован, но просто не входит в группу)

С другой стороны, если я установил raise_exception = True, приложение всегда выбрасывает 403, даже если пользователь не вошел в систему.

Есть ли возможность достичь вышеуказанного без установки raise_exception = my_function и реализации всей логики в my_function?

ответ

2

В Джанго-брекеты документы для LoginRequiredMixin предложить вам следует установить raise_exception = True таким образом, что возбуждается исключение для зарегистрированных пользователей, и redirect_unauthenticated_users = True так что неаутентифицированных пользователи перенаправляются на страницу входа в систему.

class AddAttributeView(LoginRequiredMixin, GroupRequiredMixin, FormView): 
    group_required = "SchemaAdmin" 
    raise_exception = True 
    redirect_unauthenticated_users = True 

Это, кажется, не работает на данный момент из-за this issue. В качестве работы я предлагаю написать короткий номер для raise_exception.

from django.shortcuts import redirect 

def raise_unless_unauthenticated(request): 
    if not request.user.is_authenticated(): 
     return redirect('login') 
    # returning None means PermissionDenied will be raised 
    return None 

class AddAttributeView(LoginRequiredMixin, GroupRequiredMixin, FormView): 
    group_required = "SchemaAdmin" 
    raise_exception = raise_unless_unauthenticated 
+0

Уже пробовал, что. В этом случае пользователь всегда перенаправляется на вход в систему (даже если он аутентифицирован) – ProfHase85

+1

Благодаря вам я нашел проблему: https://github.com/brack3t/django-braces/issues/181 – ProfHase85

+0

Я был просто чтобы сказать, что это может быть ошибка в фигурных скобках. Хорошо! – Alasdair

Смежные вопросы