1
0
mirror of https://github.com/django/django.git synced 2025-07-05 02:09:13 +00:00

[per-object-permissions] Fixed bug in contains_permission where it was just checking against any permission instead of the given permission

[per-object-permissions] Made changes so delete and "Save and add another" only shows up if the user has permissions
[per-object-permissions] Rewrote the has permission variables in the context for change form to use has_perms and check for model

git-svn-id: http://code.djangoproject.com/svn/django/branches/per-object-permissions@3629 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Christopher Long 2006-08-20 22:46:38 +00:00
parent 98fc1a220f
commit 455842e07e
6 changed files with 25 additions and 20 deletions

View File

@ -67,13 +67,6 @@
</div>
</form>
{% comment %}
{% if new_rlp_form %}
<div id="row_level_perm_container">
{% include "admin/row_level_permission.html" %}
</div>
{% endif %}
{% endcomment %}
</div>
{% endblock %}

View File

@ -42,7 +42,7 @@ def submit_row(context):
'show_delete_link': (not is_popup and context['has_delete_permission']
and (change or context['show_delete'])),
'show_save_as_new': not is_popup and change and opts.admin.save_as,
'show_save_and_add_another': not is_popup and (not opts.admin.save_as or context['add']),
'show_save_and_add_another': not is_popup and (not opts.admin.save_as or context['add']) and context['has_add_permission'],
'show_save_and_continue': not is_popup and context['has_change_permission'],
'show_save': True
}

View File

@ -29,7 +29,7 @@ class AdminApplistNode(template.Node):
if not m._meta.admin.hidden:
perms = {
'add': user.contains_permission("%s.%s" % (app_label, m._meta.get_add_permission()), m),
'add': user.contains_permission("%s.%s" % (app_label, m._meta.get_add_permission())),
'change': user.contains_permission("%s.%s" % (app_label, m._meta.get_change_permission()), m),
'delete': user.contains_permission("%s.%s" % (app_label, m._meta.get_delete_permission()), m),
}

View File

@ -199,8 +199,9 @@ def render_change_form(model, manipulator, context, add=False, change=False, for
extra_context = {
'add': add,
'change': change,
'has_delete_permission': context['perms'][app_label][opts.get_delete_permission()],
'has_change_permission': context['perms'][app_label][opts.get_change_permission()],
'has_delete_permission': context['user'].has_perm(app_label+"."+opts.get_delete_permission(), original),
'has_change_permission': context['user'].has_perm(app_label+"."+opts.get_change_permission(), original),
'has_add_permission': context['user'].has_perm(app_label+"."+opts.get_add_permission()),
'has_file_field': opts.has_field_type(models.FileField),
'has_absolute_url': hasattr(model, 'get_absolute_url'),
'auto_populated_fields': auto_populated_fields,

View File

@ -44,7 +44,10 @@ def view_row_level_permissions(request, app_label, model_name, object_id):
paginator = ObjectPaginator(model_instance.row_level_permissions.order_by('owner_ct', 'owner_id'),
list_per_page)
page = int(request.GET.get('page', 1))-1
try:
rlp_list = paginator.get_page(page)
except InvalidPage:
rlp_list = []
paginator_context = {
"is_paginated": paginator.has_next_page(0),
"has_next": paginator.has_next_page(page),

View File

@ -337,18 +337,25 @@ class User(models.Model):
return False
return True
def contains_permission(self, perm, model):
def contains_permission(self, perm, model=None):
if self.has_perm(perm):
return True
if model and model._meta.row_level_permissions:
perm = perm[perm.index('.')+1:]
return self.contains_row_level_perm(perm, model)
return False
def contains_row_level_perm(self, perm, model):
model_ct = ContentType.objects.get_for_model(model)
count = self.row_level_permissions_owned.filter(model_ct=model_ct.id).count()
if isinstance(perm, str):
permission = Permission.objects.get(codename__exact=perm, content_type=model_ct.id)
else:
permission = perm
count = self.row_level_permissions_owned.filter(model_ct=model_ct.id, permission=permission.id).count()
if count>0:
return True
return self.contains_group_row_level_perms(perm, model_ct)
return self.contains_group_row_level_perms(permission, model_ct)
def contains_group_row_level_perms(self, perm, ct):
#SELECT COUNT(*)
@ -367,14 +374,15 @@ class User(models.Model):
AND ug.%s=%%s
AND rlp.%s = 0
AND rlp.%s = %%s
AND rlp.%s = %%s
AND rlp.%s = %%s""" % (
backend.quote_name('auth_user_groups'), backend.quote_name('auth_rowlevelpermission'),
backend.quote_name('django_content_type'), backend.quote_name('owner_id'),
backend.quote_name('group_id'), backend.quote_name('user_id'),
backend.quote_name('negative'), backend.quote_name('owner_ct_id'),
backend.quote_name('model_ct_id'))
backend.quote_name('model_ct_id'), backend.quote_name('permission_id'))
cursor.execute(sql, [self.id, ContentType.objects.get_for_model(Group).id, ct.id])
cursor.execute(sql, [self.id, ContentType.objects.get_for_model(Group).id, ct.id, perm.id])
count = int(cursor.fetchone()[0])
return (count>0)