from functools import wraps

from django.contrib.auth.views import redirect_to_login
from django.core.exceptions import PermissionDenied


def role_required(role):
    def decorator(view_func):
        @wraps(view_func)
        def wrapped(request, *args, **kwargs):
            picker_user = request.session.get('picker_user')
            if not picker_user:
                return redirect_to_login(request.get_full_path())
            if picker_user.get('role') != role:
                raise PermissionDenied('You do not have access to this page.')
            return view_func(request, *args, **kwargs)
        return wrapped
    return decorator
