#11154: Inconsistency with permissions for proxy models
------------------------------+------------------------------------
Reporter: etianen | Owner: nobody
Type: Bug | Status: new
Component: contrib.auth | Version: SVN
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
------------------------------+------------------------------------
Changes (by danny.adair@…):
* cc: danny.adair@… (added)
Comment:
I also think that Proxy models should have their own permissions. The
current problem seems to lie in the way that !ContentTypeManager
determines the app_label of a model:
!ModelBase will - proxy or not - report the app_label either as explicitly
specified or from the parent's module name.
https://code.djangoproject.com/browser/django/trunk/django/db/models/base.py#L50
{{{
if getattr(meta, 'app_label', None) is None:
# Figure out the app_label by looking one level up.
# For 'django.contrib.sites.models', this would be 'sites'.
model_module = sys.modules[new_class.__module__]
kwargs = {"app_label": model_module.__name__.split('.')[-2]}
else:
kwargs = {}
}}}
However, !ContentTypeManager._get_opts() traverses proxies up to the non-
proxy model and then uses the entire meta of that model, incl. app_label.
https://code.djangoproject.com/browser/django/trunk/django/contrib/contenttypes/models.py#L18
{{{
def _get_opts(self, model):
opts = model._meta
while opts.proxy:
model = opts.proxy_for_model
opts = model._meta
return opts
}}}
This is where app_label needs to be preserved. Maybe just put it aside,
traverse, then readjust:
{{{
def _get_opts(self, model):
opts = model._meta
# Preserve proxy model's attr_label
attr_label = opts.attr_label
while opts.proxy:
model = opts.proxy_for_model
opts = model._meta
opts.attr_label = attr_label
return opts
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/11154#comment:23>
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 post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en.