2015-01-26 4 views
0

Я пытаюсь создать базу пользовательских прав доступа, где мой персонал работает. Например, если они работают в клинике A, они могут только просматривать/добавлять/изменять данные для этой клиники A. Но если они зачисляются в этот район, они могут получить доступ ко всем этим клиникам в этом районе. Он отлично работает на функциональном представлении базы, но его убивает меня на основе класса. До сих пор мой код следующим образом:Django CBV с пользовательским декоратором

def restrict_klinik(function): 
def wrapper(request,slug, *args, **kw): 
    klinikslug = request.user.letakstaf_set.filter(klinik__slug=slug).count() 
    retenslug = Reten.objects.filter(slug=slug).count() 
    rejectslug = Reject.objects.filter(slug=slug).count() 

    if klinikslug == 1 or retenslug == 1 or rejectslug == 1: 
     return function(request, slug, *args, **kw) 

    messages.error(request, 'Sorry, You dont have access.') 
    return HttpResponseRedirect(reverse_lazy('home')) 
return wrapper 

class RestrictKlinikMixin(views.LoginRequiredMixin): 
    @method_decorator(restrict_klinik) 
    def dispatch(self, *args, **kwargs): 
     return super(RestrictKlinikMixin, self).dispatch(*args, **kwargs) 

Я использую @restrict_klinik для моей функции базовой точки зрения, но я получил проблему при использовании базового вида класса, например:

класса AddClinic (RestrictKlinikMixin, generic.CreateView):

он выбросит ошибку «slug». любые идеи? Благодаря!

UPDATE: Видимо 1 из моих взглядов, используя kwargs [ 'слизняка'] вместо [self.kwargs 'слизняк']. Забавно, что единственное, что я изменил, это добавление нового микса в мои взгляды. Потрачено как 4 часа, выбирая это, поскольку он отлично работает в течение 1 месяца, просто используя kwargs ['slug'].

+0

Можете ли вы показать полную ошибку? – zymud

+0

, по-видимому, я использовал kwargs ['slug'] вместо self.kwargs ['slug'] в одном из моих представлений .. исправил его ... но забавно, что он работает раньше. – resakse

+0

Напишите и примите свой ответ, а не добавьте SOLVED в заголовок. Это помогает другим людям с аналогичными проблемами. – Holloway

ответ

0

По-видимому, 1 из моих просмотров использует kwargs ['slug'] вместо self.kwargs ['slug']. Забавно, что единственное, что я изменил, это добавление нового микса в мои взгляды. Потрачено как 4 часа, выбирая это, поскольку он отлично работает в течение 1 месяца, просто используя kwargs ['slug'].

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