#8159: Attempting to delete your own user account in Django admin view is not
handled properly
-------------------------------------------+--------------------------------
          Reporter:  [email protected]   |         Owner:  graham_king 
            Status:  assigned              |     Milestone:  post-1.0    
         Component:  django.contrib.admin  |       Version:  SVN         
        Resolution:                        |      Keywords:  admin delete
             Stage:  Accepted              |     Has_patch:  1           
        Needs_docs:  0                     |   Needs_tests:  0           
Needs_better_patch:  1                     |  
-------------------------------------------+--------------------------------
Changes (by kmtracey):

  * needs_better_patch:  0 => 1

Comment:

 I tried this out -- beyond just running the test I tried it on one of my
 test setups and ran into a problem.  Looks like if you try to delete
 yourself and you are not a superuser, things go south (the test deletes a
 superuser, so doesn't run afoul of the problem).  If you change the new
 test to login as and delete "adduser" instead of "super", you can see the
 problem:

 {{{
 test_delete_myself (regressiontests.admin_views.tests.DeleteSelfTest) ...
 ERROR

 ======================================================================
 ERROR: test_delete_myself
 (regressiontests.admin_views.tests.DeleteSelfTest)
 ----------------------------------------------------------------------
 Traceback (most recent call last):
   File "D:\u\kmt\django\trunk\tests\regressiontests\admin_views\tests.py",
 line 747, in test_delete_myself
     response = self.client.post('/admin/auth/user/'+ str(u.id)
 +'/delete/', {'post': 'yes'})
   File "d:\u\kmt\django\trunk\django\test\client.py", line 299, in post
     return self.request(**r)
   File "d:\u\kmt\django\trunk\django\core\handlers\base.py", line 86, in
 get_response
     response = callback(request, *callback_args, **callback_kwargs)
   File "d:\u\kmt\django\trunk\django\contrib\admin\sites.py", line 450, in
 root
     return self.model_page(request, *url.split('/', 2))
   File "d:\u\kmt\django\trunk\django\views\decorators\cache.py", line 44,
 in _wrapped_view_func
     response = view_func(request, *args, **kwargs)
   File "d:\u\kmt\django\trunk\django\contrib\admin\sites.py", line 469, in
 model_page
     return admin_obj(request, rest_of_url)
   File "d:\u\kmt\django\trunk\django\contrib\auth\admin.py", line 42, in
 __call__
     return super(UserAdmin, self).__call__(request, url)
   File "d:\u\kmt\django\trunk\django\contrib\admin\options.py", line 799,
 in __call__
     return self.delete_view(request, unquote(url[:-7]))
   File "d:\u\kmt\django\trunk\django\contrib\auth\admin.py", line 147, in
 delete_view
     return super(UserAdmin, self).delete_view(request, object_id,
 extra_context)
   File "d:\u\kmt\django\trunk\django\contrib\admin\options.py", line 706,
 in delete_view
     if not self.has_delete_permission(request, obj):
   File "d:\u\kmt\django\trunk\django\contrib\admin\options.py", line 273,
 in has_delete_permission
     return request.user.has_perm(opts.app_label + '.' +
 opts.get_delete_permission())
   File "d:\u\kmt\django\trunk\django\contrib\auth\models.py", line 232, in
 has_perm
     if backend.has_perm(self, perm):
   File "d:\u\kmt\django\trunk\django\contrib\auth\backends.py", line 65,
 in has_perm
     return perm in self.get_all_permissions(user_obj)
   File "d:\u\kmt\django\trunk\django\contrib\auth\backends.py", line 60,
 in get_all_permissions
     user_obj._perm_cache = set([u"%s.%s" % (p.content_type.app_label,
 p.codename) for p in user_obj.user_permissions.select_related()])
   File "d:\u\kmt\django\trunk\django\db\models\fields\related.py", line
 568, in __get__
     target_col_name=qn(self.field.m2m_reverse_name())
   File "d:\u\kmt\django\trunk\django\db\models\fields\related.py", line
 380, in __init__
     raise ValueError("%r instance needs to have a primary key value before
 a many-to-many relationship can be used." % instance.__class__.__name__)
 ValueError: 'User' instance needs to have a primary key value before a
 many-to-many relationship can be used.

 ----------------------------------------------------------------------
 Ran 1 test in 0.631s

 FAILED (errors=1)
 Destroying test database...

 }}}

 I guess if the logged-in user is not a superuser, permissions have to be
 checked, but the change to avoid problems when deleting self has made that
 impossible?

-- 
Ticket URL: <http://code.djangoproject.com/ticket/8159#comment:9>
Django <http://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to