#30284: Redundant is_active check in auth.backends.ModelBackend
------------------------------------------------+------------------------
Reporter: Tobias Bengfort | Owner: nobody
Type: Cleanup/optimization | Status: new
Component: contrib.auth | Version: master
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 1
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
------------------------------------------------+------------------------
See https://github.com/django/django/pull/11037
`User.is_active` is checked in `ModelBackend.get_all_permissions()`,
`ModelBackend.has_perm()` and `ModelBackend.has_module_perms()`. I think
the last two are redundant and should be removed.
timgraham had
[https://github.com/django/django/pull/11037#pullrequestreview-217534553
concerns] though:
> I'm unsure about removing the "redundant" is_active checks. It might be
that some ModelBackend sublcasses rely on them. For example, if you
subclass get_all_permissions() and omitting the is_active check (which
wasn't there prior to Django 1.8
[https://github.com/django/django/commit/c33447a50c1b0a96c6e2261f7c45d2522a3fe28d
c33447a])... then your application would still have is_active checks in
the other methods. This needs careful consideration and perhaps a
discussion on the mailing list as to whether the benefits are worth the
possible security issues. At least a release note is required. I'm not
sure if this is required as part of the "BaseBackend" change, but I think
it merits its own ticket.
My opinion is exactly the opposite: If a ModelBackend subclass does not
check `is_active` in `get_all_permissions()` that is a bug and potentially
even a security issue. The redundand checks hide these issues and
therefore make it harder to find them.
I also think that the different methods should be consitent: If a
permission is returned by `get_all_permissions()`, then checking that
permission with `has_perm()` should return `True`. The only reason to do
anything special in `has_perm()` is for performance optimizations.
--
Ticket URL: <https://code.djangoproject.com/ticket/30284>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" 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].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/045.4112ceabd5a3384a84a2ebee6ea8bd86%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.