1
0
mirror of https://github.com/django/django.git synced 2025-07-05 10:19:20 +00:00

Made generic-auth backwards compatible with the trunk.

git-svn-id: http://code.djangoproject.com/svn/django/branches/generic-auth@4256 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Joseph Kocherhans 2006-12-29 03:15:37 +00:00
parent a8ba8485de
commit 26415279ca
4 changed files with 40 additions and 22 deletions

View File

@ -28,11 +28,11 @@ class AdminApplistNode(template.Node):
model_list = [] model_list = []
for m in app_models: for m in app_models:
if m._meta.admin: if m._meta.admin:
opts = m._meta # TODO: convert this to use Permission objects instead of strings
perms = { perms = {
'add': has_permission(user, opts.get_add_permission()), 'add': user.has_perm("%s.%s" % (app_label, m._meta.get_add_permission())),
'change': has_permission(user, opts.get_change_permission()), 'change': user.has_perm("%s.%s" % (app_label, m._meta.get_change_permission())),
'delete': has_permission(user, opts.get_delete_permission()), 'delete': user.has_perm("%s.%s" % (app_label, m._meta.get_delete_permission())),
} }
# Check whether user has any perm for this module. # Check whether user has any perm for this module.

View File

@ -200,8 +200,8 @@ def render_change_form(model, manipulator, context, add=False, change=False, for
extra_context = { extra_context = {
'add': add, 'add': add,
'change': change, 'change': change,
'has_delete_permission': context['perms'][app_label][opts.get_delete_permission().codename], 'has_delete_permission': context['perms'][app_label][opts.get_delete_permission()],
'has_change_permission': context['perms'][app_label][opts.get_change_permission().codename], 'has_change_permission': context['perms'][app_label][opts.get_change_permission()],
'has_file_field': opts.has_field_type(models.FileField), 'has_file_field': opts.has_field_type(models.FileField),
'has_absolute_url': hasattr(model, 'get_absolute_url'), 'has_absolute_url': hasattr(model, 'get_absolute_url'),
'auto_populated_fields': auto_populated_fields, 'auto_populated_fields': auto_populated_fields,
@ -230,7 +230,7 @@ def add_stage(request, app_label, model_name, show_delete=False, form_url='', po
raise Http404("App %r, model %r, not found" % (app_label, model_name)) raise Http404("App %r, model %r, not found" % (app_label, model_name))
opts = model._meta opts = model._meta
if not has_permission(request.user, opts.get_add_permission()): if not has_permission(request.user, opts.add_permission):
raise PermissionDenied raise PermissionDenied
manipulator = model.AddManipulator() manipulator = model.AddManipulator()
@ -253,7 +253,7 @@ def add_stage(request, app_label, model_name, show_delete=False, form_url='', po
# We want to call has permission WITHOUT passing it the new # We want to call has permission WITHOUT passing it the new
# object here. We're concerned with whether the user can edit # object here. We're concerned with whether the user can edit
# ANY instances of this model, not just the one we created. # ANY instances of this model, not just the one we created.
if has_permission(request.user, opts.get_change_permission()): if has_permission(request.user, opts.change_permission):
# redirect to list view # redirect to list view
post_url = '../' post_url = '../'
else: else:
@ -318,7 +318,7 @@ def change_stage(request, app_label, model_name, object_id):
except model.DoesNotExist: except model.DoesNotExist:
raise Http404('%s object with primary key %r does not exist' % (model_name, escape(object_id))) raise Http404('%s object with primary key %r does not exist' % (model_name, escape(object_id)))
if not has_permission(request.user, opts.get_change_permission(), manipulator.original_object): if not has_permission(request.user, opts.change_permission, manipulator.original_object):
raise PermissionDenied raise PermissionDenied
if request.POST: if request.POST:
@ -426,7 +426,7 @@ def _get_deleted_objects(deleted_objects, perms_needed, user, obj, opts, current
pass pass
else: else:
if related.opts.admin: if related.opts.admin:
if not has_permission(user, related.opts.get_delete_permission(), related): if not has_permission(user, related.opts.delete_permission, related):
perms_needed.add(related.opts.verbose_name) perms_needed.add(related.opts.verbose_name)
# We don't care about populating deleted_objects now. # We don't care about populating deleted_objects now.
continue continue
@ -456,7 +456,7 @@ def _get_deleted_objects(deleted_objects, perms_needed, user, obj, opts, current
# If there were related objects, and the user doesn't have # If there were related objects, and the user doesn't have
# permission to delete them, add the missing perm to perms_needed. # permission to delete them, add the missing perm to perms_needed.
if related.opts.admin and has_related_objs: if related.opts.admin and has_related_objs:
if not has_permission(user, related.opts.get_delete_permission(), related): if not has_permission(user, related.opts.delete_permission, related):
perms_needed.add(related.opts.verbose_name) perms_needed.add(related.opts.verbose_name)
for related in opts.get_all_related_many_to_many_objects(): for related in opts.get_all_related_many_to_many_objects():
if related.opts in opts_seen: if related.opts in opts_seen:
@ -484,7 +484,7 @@ def _get_deleted_objects(deleted_objects, perms_needed, user, obj, opts, current
# If there were related objects, and the user doesn't have # If there were related objects, and the user doesn't have
# permission to change them, add the missing perm to perms_needed. # permission to change them, add the missing perm to perms_needed.
if related.opts.admin and has_related_objs: if related.opts.admin and has_related_objs:
if not has_permission(user, related.opts.get_delete_permission(), related): if not has_permission(user, related.opts.delete_permission, related):
perms_needed.add(related.opts.verbose_name) perms_needed.add(related.opts.verbose_name)
def delete_stage(request, app_label, model_name, object_id): def delete_stage(request, app_label, model_name, object_id):
@ -495,7 +495,7 @@ def delete_stage(request, app_label, model_name, object_id):
raise Http404("App %r, model %r, not found" % (app_label, model_name)) raise Http404("App %r, model %r, not found" % (app_label, model_name))
opts = model._meta opts = model._meta
obj = get_object_or_404(model, pk=object_id) obj = get_object_or_404(model, pk=object_id)
if not has_permission(request.user, opts.get_delete_permission(), obj): if not has_permission(request.user, opts.delete_permission, obj):
raise PermissionDenied raise PermissionDenied
# Populate deleted_objects, a data structure of all related objects that # Populate deleted_objects, a data structure of all related objects that
@ -749,7 +749,7 @@ def change_list(request, app_label, model_name):
# There isn't a specific object to check here, so don't pass one to # There isn't a specific object to check here, so don't pass one to
# has_permission. There should be a has_permission implementation # has_permission. There should be a has_permission implementation
# registered that knows when the obj arg is missing. # registered that knows when the obj arg is missing.
if not has_permission(request.user, model._meta.get_change_permission()): if not has_permission(request.user, model._meta.change_permission):
raise PermissionDenied raise PermissionDenied
try: try:
cl = ChangeList(request, model) cl = ChangeList(request, model)

View File

@ -106,25 +106,43 @@ class Options(object):
return 'ORDER BY ' + orderlist2sql(self.ordering, self, pre) return 'ORDER BY ' + orderlist2sql(self.ordering, self, pre)
def get_add_permission(self): def get_add_permission(self):
return 'add_%s' % self.object_name.lower()
def get_change_permission(self):
return 'change_%s' % self.object_name.lower()
def get_delete_permission(self):
return 'delete_%s' % self.object_name.lower()
def _get_add_permission(self):
# import goes here because models aren't necessarily set up when this
# module is imported
from django.contrib.auth.models import Permission from django.contrib.auth.models import Permission
codename = 'add_%s' % self.object_name.lower() codename = 'add_%s' % self.object_name.lower()
return Permission.objects.get( return Permission.objects.get(
content_type__app_label__exact=self.app_label, content_type__app_label__exact=self.app_label,
codename=codename) codename=codename)
add_permission = property(_get_add_permission)
def get_change_permission(self): def _get_change_permission(self):
# import goes here because models aren't necessarily set up when this
# module is imported
from django.contrib.auth.models import Permission from django.contrib.auth.models import Permission
codename = 'change_%s' % self.object_name.lower() codename = 'change_%s' % self.object_name.lower()
return Permission.objects.get( return Permission.objects.get(
content_type__app_label__exact=self.app_label, content_type__app_label__exact=self.app_label,
codename=codename) codename=codename)
change_permission = property(_get_change_permission)
def get_delete_permission(self): def _get_delete_permission(self):
# import goes here because models aren't necessarily set up when this
# module is imported
from django.contrib.auth.models import Permission from django.contrib.auth.models import Permission
codename = 'delete_%s' % self.object_name.lower() codename = 'delete_%s' % self.object_name.lower()
return Permission.objects.get( return Permission.objects.get(
content_type__app_label__exact=self.app_label, content_type__app_label__exact=self.app_label,
codename=codename) codename=codename)
delete_permission = property(_get_delete_permission)
def get_all_related_objects(self): def get_all_related_objects(self):
try: # Try the cache first. try: # Try the cache first.

View File

@ -39,9 +39,9 @@ Create a Person that we'll check from access to.
Get permissions from the model Get permissions from the model
>>> opts = Person._meta >>> opts = Person._meta
>>> add_permission = opts.get_add_permission() >>> add_permission = opts.add_permission
>>> change_permission = opts.get_change_permission() >>> change_permission = opts.change_permission
>>> delete_permission = opts.get_delete_permission() >>> delete_permission = opts.delete_permission
Give the user add and change permissions for Person models. Give the user add and change permissions for Person models.
@ -111,9 +111,9 @@ created above.
Set up some convenient references to the various permission objects. Set up some convenient references to the various permission objects.
>>> add_permission = Article._meta.get_add_permission() >>> add_permission = Article._meta.add_permission
>>> change_permission = Article._meta.get_change_permission() >>> change_permission = Article._meta.change_permission
>>> delete_permission = Article._meta.get_delete_permission() >>> delete_permission = Article._meta.delete_permission
Adding isn't tied to a particular object, and we haven't given the user Adding isn't tied to a particular object, and we haven't given the user
permission to add Articles yet, so this should fail. permission to add Articles yet, so this should fail.