From 7c986521cf37b7384e7f2f3cee8bae4b1e4f624b Mon Sep 17 00:00:00 2001 From: Christopher Long Date: Fri, 18 Aug 2006 14:06:02 +0000 Subject: [PATCH] [per-object-permissions] Added grant_change_row_level_perm and grant_delete_row_level_perm for admin class in models, assigns the given permissions automatically after creation of an object git-svn-id: http://code.djangoproject.com/svn/django/branches/per-object-permissions@3609 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/contrib/admin/views/main.py | 8 ++++++++ django/db/models/options.py | 5 ++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py index b5ae648dfa..6f693dd8b0 100644 --- a/django/contrib/admin/views/main.py +++ b/django/contrib/admin/views/main.py @@ -255,6 +255,14 @@ def add_stage(request, app_label, model_name, show_delete=False, form_url='', po pk_value = new_object._get_pk_val() LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(model).id, pk_value, str(new_object), ADDITION) msg = _('The %(name)s "%(obj)s" was added successfully.') % {'name': opts.verbose_name, 'obj': new_object} + + if new_object._meta.row_level_permissions: + from django.contrib.auth.models import RowLevelPermission + admin_opts = new_object._meta.admin + RowLevelPermission.objects.create_default_row_permissions(new_object, request.user, + change=admin_opts.grant_change_row_level_perm, + delete=admin_opts.grant_delete_row_level_perm) + # Here, we distinguish between different save types by checking for # the presence of keys in request.POST. if request.POST.has_key("_continue"): diff --git a/django/db/models/options.py b/django/db/models/options.py index e96afac16a..a574623c86 100644 --- a/django/db/models/options.py +++ b/django/db/models/options.py @@ -202,7 +202,8 @@ class Options(object): class AdminOptions(object): def __init__(self, fields=None, js=None, list_display=None, list_display_links=None, list_filter=None, date_hierarchy=None, save_as=False, ordering=None, search_fields=None, - save_on_top=False, list_select_related=False, manager=None, list_per_page=100): + save_on_top=False, list_select_related=False, manager=None, list_per_page=100, + grant_change_row_level_perm=False, grant_delete_row_level_perm=False): self.fields = fields self.js = js or [] self.list_display = list_display or ['__str__'] @@ -215,6 +216,8 @@ class AdminOptions(object): self.list_select_related = list_select_related self.list_per_page = list_per_page self.manager = manager or Manager() + self.grant_change_row_level_perm=grant_change_row_level_perm + self.grant_delete_row_level_perm=grant_delete_row_level_perm def get_field_sets(self, opts): "Returns a list of AdminFieldSet objects for this AdminOptions object."