Блог о програмировании и программистах

Чем больше всматривашься в код, тем больше код всматривается в тебя

Установка прав доступа для контролера

Определение, является ли пользователь админом:



from django.http import HttpResponse, HttpResponseRedirect, HttpResponseForbidden
from django.contrib import messages
from django.utils.decorators import available_attrs
from functools import wraps
#Пишем декоратор, для контролера
def is_user_admin(view_func):
    @wraps(view_func, assigned=available_attrs(view_func))
    def wrap(request, *args, **kwargs):
        if request.user.is_superuser:
            #исполняем переданный нам контролер
            res = view_func(request, *args, **kwargs)
        else:
            #редиректим на начальную страницу с ошибкой
            messages.error(request, u'У Вас недостаточно прав для доступа')
            return HttpResponseRedirect('/')
        return res
    return wrap   

#Пример применения на контролере
@is_user_admin
def index_controler(request):
    context={}
    return render_to_response('index.html', context, context_instance=RequestContext(request)) 


Код авторизации под пользователя

Можно вставить в любой контролер и исполнении зайти уже авторизованным:


from django.contrib.auth.models import User
u = User.objects.get(id=3)
backend = get_backends()[0]
u.backend = "%s.%s" % (backend.__module__, backend.__class__.__name__)
login(request, u)\