﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
22295	admin/base.html only shows #user-tools when user is staff	wouter@…	Tim Graham <timograham@…>	"The build-in Django Admin ships with the admin/base.html template. This template is, among other things, responsible for rendering the #user-tools div that contains the 'log out' and 'change password' buttons. The user tools are only rendered if user.is_active and user.is_staff are True, see:
https://github.com/django/django/blob/2bc51438664b5ffbbd1430b4f9f3307f18b2b9db/django/contrib/admin/templates/admin/base.html#L27

This check makes sure that #user-tools is only rendered when the user is actually authenticated for use of the admin. This is required because the login template (admin/login.html) eventually inherits from admin/base.html. If the check would be omitted, the #user-tools would become visible if the user was yet to be authenticated resulting in a situation where the user could 'log out' without being 'logged in' first.

This check is therefore relevant, but is it the wrong check and breaks inheritance in the following case:

Lets say you want to inherit from django.contrib.admin.sites.BaseSite to create a customized admin for special users that are not necessarily staff members. You can override the BaseSite.has_permission method. Currently this method holds the condition: {{{ request.user.is_active and request.user.is_staff }}}. You might change this to {{{ request.user.is_active and request.user.is_a_special_user_but_not_staff }}}. This user would now be allowed to access this customised admin without having access to the default admin.

The problem is that the user cannot log out from this special admin because the #user-tools are only rendered if the user is a staff member.

I can think of two solutions:
1. Use the BaseAdmin.has_permission to do this check
2. Create a block called user-tools in the template and override this block in the admin/login.html to be empty

In my opinion solution number 2 would be the best approach :-).
"	Cleanup/optimization	closed	contrib.admin	dev	Normal	fixed	user-tools admin base template	jeffrey@… tanner	Ready for checkin	1	0	0	0	0	0
