Here is the text of linked stuff for convenience:

For authorization backends checking object level permissions (like 
guardian) usually requires calling the django's default authorization 
backend as a fallback to the more general set of permissions:

if user.has_perm('foo.change_bar', obj=bar) or user.has_perm('foo.change_bar'):
    ...


However, this not only looks ugly, but also requires polling of all the 
backends twice, and thus, is a performance loss. 


First, and possibly the best, solution to this is that, django does not 
deny permission if obj argument is provided, but just ignores it. This is 
also very logical, one who has a permission for the entire model/table, 
would also have it for an instance/row. This way by properly ordering 
backends in the settings, it could be a fallback solution for the lower 
level checkers. This might be the move in the right direction, although it 
is backwards incompatible. 


A second solution is a keyword argument, such as fallback_to_model=None, 
that will allow lower-level checkers mimic the model level permissions that 
django does. Obviously, this is not DRY. But is needed if the first 
solution is not accepted to get the necessary permissions with one round of 
polling, and without cluttering the code. If it was accepted, it would 
still be a useful addition since it would allow backends to prefer to 
handle the fallback by themselves. Or, it would allow users who fallback by 
default override that behavior and not fallback (via a value of False), 
i.e., when object level permissions are definitive. 

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers  (Contributions to Django itself)" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-developers+unsubscr...@googlegroups.com.
To post to this group, send email to django-developers@googlegroups.com.
Visit this group at https://groups.google.com/group/django-developers.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-developers/6dec9e1b-e017-47ad-98bb-83a9e9d9b975%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to