mirror of
https://github.com/django/django.git
synced 2025-07-05 02:09:13 +00:00
[per-object-permissions] Sets the row level permisisons on objects created inline if the inline objects have row level permissions enabled. This has not been tested indepth, and might not work 100%
git-svn-id: http://code.djangoproject.com/svn/django/branches/per-object-permissions@3895 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
655bee8b28
commit
46f6dc7e4e
@ -264,6 +264,13 @@ def add_stage(request, app_label, model_name, show_delete=False, form_url='', po
|
|||||||
change=admin_opts.grant_change_row_level_perm,
|
change=admin_opts.grant_change_row_level_perm,
|
||||||
delete=admin_opts.grant_delete_row_level_perm)
|
delete=admin_opts.grant_delete_row_level_perm)
|
||||||
|
|
||||||
|
for rel_obj in manipulator.new_rel_objs:
|
||||||
|
if rel_obj._meta.row_level_permissions:
|
||||||
|
from django.contrib.auth.models import RowLevelPermission
|
||||||
|
admin_opts = rel_obj._meta.admin
|
||||||
|
RowLevelPermission.objects.create_default_row_permissions(rel_obj, 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
|
# Here, we distinguish between different save types by checking for
|
||||||
# the presence of keys in request.POST.
|
# the presence of keys in request.POST.
|
||||||
if request.POST.has_key("_continue"):
|
if request.POST.has_key("_continue"):
|
||||||
@ -353,6 +360,14 @@ def change_stage(request, app_label, model_name, object_id):
|
|||||||
change_message = _('No fields changed.')
|
change_message = _('No fields changed.')
|
||||||
LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(model).id, pk_value, str(new_object), CHANGE, change_message)
|
LogEntry.objects.log_action(request.user.id, ContentType.objects.get_for_model(model).id, pk_value, str(new_object), CHANGE, change_message)
|
||||||
|
|
||||||
|
for rel_obj in manipulator.new_rel_objs:
|
||||||
|
if rel_obj._meta.row_level_permissions:
|
||||||
|
from django.contrib.auth.models import RowLevelPermission
|
||||||
|
admin_opts = rel_obj._meta.admin
|
||||||
|
RowLevelPermission.objects.create_default_row_permissions(rel_obj, request.user,
|
||||||
|
change=admin_opts.grant_change_row_level_perm,
|
||||||
|
delete=admin_opts.grant_delete_row_level_perm)
|
||||||
|
|
||||||
msg = _('The %(name)s "%(obj)s" was changed successfully.') % {'name': opts.verbose_name, 'obj': new_object}
|
msg = _('The %(name)s "%(obj)s" was changed successfully.') % {'name': opts.verbose_name, 'obj': new_object}
|
||||||
if request.POST.has_key("_continue"):
|
if request.POST.has_key("_continue"):
|
||||||
request.user.message_set.create(message=msg + ' ' + _("You may edit it again below."))
|
request.user.message_set.create(message=msg + ' ' + _("You may edit it again below."))
|
||||||
|
@ -129,6 +129,7 @@ class AutomaticManipulator(forms.Manipulator):
|
|||||||
# TODO: Add to 'fields_changed'
|
# TODO: Add to 'fields_changed'
|
||||||
|
|
||||||
expanded_data = DotExpandedDict(dict(new_data))
|
expanded_data = DotExpandedDict(dict(new_data))
|
||||||
|
self.new_rel_objs = []
|
||||||
# Save many-to-one objects. Example: Add the Choice objects for a Poll.
|
# Save many-to-one objects. Example: Add the Choice objects for a Poll.
|
||||||
for related in self.opts.get_all_related_objects():
|
for related in self.opts.get_all_related_objects():
|
||||||
# Create obj_list, which is a DotExpandedDict such as this:
|
# Create obj_list, which is a DotExpandedDict such as this:
|
||||||
@ -207,6 +208,7 @@ class AutomaticManipulator(forms.Manipulator):
|
|||||||
if self.change:
|
if self.change:
|
||||||
if not old_rel_obj: # This object didn't exist before.
|
if not old_rel_obj: # This object didn't exist before.
|
||||||
self.fields_added.append('%s "%s"' % (related.opts.verbose_name, new_rel_obj))
|
self.fields_added.append('%s "%s"' % (related.opts.verbose_name, new_rel_obj))
|
||||||
|
self.new_rel_objs.append(new_rel_obj)
|
||||||
else:
|
else:
|
||||||
for f in related.opts.fields:
|
for f in related.opts.fields:
|
||||||
if not f.primary_key and f != related.field and str(getattr(old_rel_obj, f.attname)) != str(getattr(new_rel_obj, f.attname)):
|
if not f.primary_key and f != related.field and str(getattr(old_rel_obj, f.attname)) != str(getattr(new_rel_obj, f.attname)):
|
||||||
@ -225,6 +227,7 @@ class AutomaticManipulator(forms.Manipulator):
|
|||||||
new_rel_obj.delete()
|
new_rel_obj.delete()
|
||||||
self.fields_deleted.append('%s "%s"' % (related.opts.verbose_name, old_rel_obj))
|
self.fields_deleted.append('%s "%s"' % (related.opts.verbose_name, old_rel_obj))
|
||||||
|
|
||||||
|
|
||||||
# Save the order, if applicable.
|
# Save the order, if applicable.
|
||||||
if self.change and self.opts.get_ordered_objects():
|
if self.change and self.opts.get_ordered_objects():
|
||||||
order = new_data['order_'] and map(int, new_data['order_'].split(',')) or []
|
order = new_data['order_'] and map(int, new_data['order_'].split(',')) or []
|
||||||
|
Loading…
x
Reference in New Issue
Block a user