#29220 closed New feature (invalid)
Auth: change user_passes_test func, new arg arg_position add
Reported by: | Oscar Lopez | Owned by: | nobody |
---|---|---|---|
Component: | contrib.auth | Version: | 1.11 |
Severity: | Normal | Keywords: | Auth, user_passes_test, decorator |
Cc: | oscarjoselopez26@…, Oscar Lopez | Triage Stage: | Unreviewed |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | yes | UI/UX: | no |
Description (last modified by )
I had problems Add my decorations user_passes_test functions, because decorator _wrapped_view assume, the first arg is the request
var parameter, when i call user_passes_test from a view into a class, that not work, it take the arg self
look like a arg request
example:
@user_passes_test(role_client_check)
def index(self, request):
Fatal error: Class don't have attribute user.
The next new change work for Django 1.11
but i see that Django 2.X file, doesn't change a lot
Now i can call the auth:
@user_passes_test(role_client_check, arg_position=0)
def index(self, request):
arg_position
can be specific when the first argument isn't "request"
arg_position
is a integer with the position of request on view function
I created my own user_passes_test function to solve this feature.
Attachments (1)
Change History (6)
by , 7 years ago
Attachment: | decorators.py added |
---|
comment:1 by , 7 years ago
Description: | modified (diff) |
---|---|
Type: | Uncategorized → New feature |
comment:2 by , 7 years ago
Cc: | added |
---|
follow-up: 5 comment:3 by , 7 years ago
Resolution: | → invalid |
---|---|
Status: | new → closed |
It looks like you have misunderstood how this works.
When using a class-based view (CBV) you need to use UserPassesTestMixin instead of the @user_passes_test
decorator.
(Alternatively, you can use @method_decorator
to make this work - see https://stackoverflow.com/q/8082670/ - but the using the mixin is straightforward.)
comment:5 by , 7 years ago
Replying to Nick Pope:
It looks like you have misunderstood how this works.
When using a class-based view (CBV) you need to use UserPassesTestMixin instead of the
@user_passes_test
decorator.
(Alternatively, you can use
@method_decorator
to make this work - see https://stackoverflow.com/q/8082670/ - but using the mixin is straightforward.)
Oh y tried django.contrib.auth.mixins.UserPassesTestMixin but this work only when using class-based views, im going to try the stackoverflow method
\django\contrib\auth\decorators.py just one file update