@login_required needs "request" as the first parameter.

On Wed, Oct 31, 2018 at 11:58 AM Joel Mathew <[email protected]> wrote:

> I have a custom function to check if a user is authorized to do
> certain functions:
>
> @login_required
> def checkpermission(request, permiss):
>     username = request.user.username
>     print(f"username is {username}")
>     print(f"User.objects.filter() is {User.objects.filter()}")
>     userobj = User.objects.get(username=username)
>     print(dir(userobj))
>     print(userobj.user_permissions.all())
>     print(Permission.objects.filter(group__user=userobj))
>     perms = getpermissions(userobj)
>     for perm in perms:
>         p = perm.name.lower().replace(" ", "_")
>         if permiss == p:
>             print("Has permission: %s" % p)
>             return True
>     print("No")
>     return False
>
> def getpermissions(userobj):
>     if userobj.is_superuser:
>         return Permission.objects.all()
>     return userobj.user_permissions.all() |
> Permission.objects.filter(group__user=userobj)
>
> The problem arises if I write the previous function with decorator:
>
> @login_required
> def getpermissions(userobj):
>     if userobj.is_superuser:
>         return Permission.objects.all()
>     return userobj.user_permissions.all() |
> Permission.objects.filter(group__user=userobj)
>
> In this case, I get the error:
>
> 2018-10-31 21:26:51,239 django.request ERROR    Internal Server Error:
> /clinic/joelent/doctors
> Traceback (most recent call last):
>   File
> "/home/joel/.local/lib/python3.6/site-packages/django/core/handlers/exception.py",
> line 34, in inner
>     response = get_response(request)
>   File
> "/home/joel/.local/lib/python3.6/site-packages/django/core/handlers/base.py",
> line 126, in _get_response
>     response = self.process_exception_by_middleware(e, request)
>   File
> "/home/joel/.local/lib/python3.6/site-packages/django/core/handlers/base.py",
> line 124, in _get_response
>     response = wrapped_callback(request, *callback_args, **callback_kwargs)
>   File
> "/home/joel/.local/lib/python3.6/site-packages/django/contrib/auth/decorators.py",
> line 21, in _wrapped_view
>     return view_func(request, *args, **kwargs)
>   File "/home/joel/myappointments/clinic/views.py", line 2797, in
> clinicdoctorlist
>     if checkpermission(request, "can_change_doctor") and
> HasMembership(request, cliniclabel):
>   File
> "/home/joel/.local/lib/python3.6/site-packages/django/contrib/auth/decorators.py",
> line 21, in _wrapped_view
>     return view_func(request, *args, **kwargs)
>   File "/home/joel/myappointments/clinic/views.py", line 2970, in
> checkpermission
>     perms = getpermissions(userobj)
>   File
> "/home/joel/.local/lib/python3.6/site-packages/django/contrib/auth/decorators.py",
> line 20, in _wrapped_view
>     if test_func(request.user):
> AttributeError: 'User' object has no attribute 'user'
>
> Why would this be happening?
>
> Sincerely yours,
>
> Joel G Mathew
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/django-users.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/django-users/CAA%3Diw_94fELQWM873_y6w%2B0S8vCA2xtO44sG45dqMp4DSC8qeQ%40mail.gmail.com
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/CAD4ANxVoNhmE78-n0SQFn1QFFz1O9-wXBs9p5G8jfsiXa190Kw%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to