Fixed #550 -- Default admin template now checks user permissions, hiding apps/modules/actions for which the user doesn't have permissions. Thanks, Jason Huggins
git-svn-id: http://code.djangoproject.com/svn/django/trunk@684 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
572ac3e7df
commit
530cdb5a8d
|
@ -9,21 +9,38 @@
|
||||||
{% load adminapplist %}
|
{% load adminapplist %}
|
||||||
|
|
||||||
{% get_admin_app_list as app_list %}
|
{% get_admin_app_list as app_list %}
|
||||||
{% for app in app_list %}
|
{% if app_list %}
|
||||||
<div class="module">
|
{% for app in app_list %}
|
||||||
<h2>{{ app.name }}</h2>
|
<div class="module">
|
||||||
<table>
|
<h2>{{ app.name }}</h2>
|
||||||
{% for model in app.models %}
|
<table>
|
||||||
<tr>
|
{% for model in app.models %}
|
||||||
<th><a href="{{ model.admin_url }}">{{ model.name }}</a></th>
|
<tr>
|
||||||
<td class="x50"><a href="{{ model.admin_url }}add/" class="addlink">Add</a></td>
|
{% if model.perms.change %}
|
||||||
<td class="x75"><a href="{{ model.admin_url }}" class="changelink">Change</a></td>
|
<th><a href="{{ model.admin_url }}">{{ model.name }}</a></th>
|
||||||
</tr>
|
{% else %}
|
||||||
{% endfor %}
|
<th>{{ model.name }}</th>
|
||||||
</table>
|
{% endif %}
|
||||||
</div>
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
|
{% if model.perms.add %}
|
||||||
|
<td class="x50"><a href="{{ model.admin_url }}add/" class="addlink">Add</a></td>
|
||||||
|
{% else %}
|
||||||
|
<td class="x50"> </td>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if model.perms.change %}
|
||||||
|
<td class="x75"><a href="{{ model.admin_url }}" class="changelink">Change</a></td>
|
||||||
|
{% else %}
|
||||||
|
<td class="x75"> </td>
|
||||||
|
{% endif %}
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
{% endfor %}
|
||||||
|
{% else %}
|
||||||
|
<p>You don't have permission to edit anything.</p>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -8,16 +8,38 @@ class AdminApplistNode(template.Node):
|
||||||
from django.core import meta
|
from django.core import meta
|
||||||
from django.utils.text import capfirst
|
from django.utils.text import capfirst
|
||||||
app_list = []
|
app_list = []
|
||||||
|
user = context['user']
|
||||||
|
|
||||||
for app in meta.get_installed_model_modules():
|
for app in meta.get_installed_model_modules():
|
||||||
app_label = app.__name__[app.__name__.rindex('.')+1:]
|
app_label = app.__name__[app.__name__.rindex('.')+1:]
|
||||||
model_list = [{'name': capfirst(m._meta.verbose_name_plural),
|
has_module_perms = user.has_module_perms(app_label)
|
||||||
'admin_url': '%s/%s/' % (app_label, m._meta.module_name)} \
|
|
||||||
for m in app._MODELS if m._meta.admin]
|
if has_module_perms:
|
||||||
if model_list:
|
model_list = []
|
||||||
app_list.append({
|
for m in app._MODELS:
|
||||||
'name': app_label.title(),
|
if m._meta.admin:
|
||||||
'models': model_list,
|
module_name = m._meta.module_name
|
||||||
})
|
perms = {
|
||||||
|
'add': user.has_perm("%s.%s" % (app_label, m._meta.get_add_permission())),
|
||||||
|
'change': user.has_perm("%s.%s" % (app_label, m._meta.get_change_permission())),
|
||||||
|
'delete': user.has_perm("%s.%s" % (app_label, m._meta.get_delete_permission())),
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check whether user has any perm for this module.
|
||||||
|
# If so, add the module to the model_list.
|
||||||
|
if True in perms.values():
|
||||||
|
model_list.append({
|
||||||
|
'name': capfirst(m._meta.verbose_name_plural),
|
||||||
|
'admin_url': '%s/%s/' % (app_label, m._meta.module_name),
|
||||||
|
'perms': perms,
|
||||||
|
})
|
||||||
|
|
||||||
|
if model_list:
|
||||||
|
app_list.append({
|
||||||
|
'name': app_label.title(),
|
||||||
|
'has_module_perms': has_module_perms,
|
||||||
|
'models': model_list,
|
||||||
|
})
|
||||||
context[self.varname] = app_list
|
context[self.varname] = app_list
|
||||||
return ''
|
return ''
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue