I would like to implement a 2nd admin site which provides a subset of feature of the primary admin site. That's possible and described in the Django docs
However, I would like to limit access on the primary admin site. Some users can access the 2ndary site but not the primary site.
In order to implement that feature, I would like these users not to be in the staff (is_staff=False) and rewrite the AdminSite.has_permission
class SecondaryAdminSite(AdminSite):
def has_permission(self, request):
if request.user.is_anonymous:
try:
username = request.POST['username']
password = request.POST['password']
except KeyError:
return False
try:
user = User.objects.get(username = username)
if user.check_password(password):
return user.has_perm('app.change_onlythistable')
else:
return False
except User.DoesNotExist:
return False
else:
return request.user.has_perm('app.change_onlythistable')
Unfortunately, this approach doesn't work. The user can login but can't see anything in the secondary admin site.
What's wrong with this approach? Any idea how to implement this feature?
Thanks in advance
has_permissionis being called? Does nothing whatsoever show up on the page (i.e. it is completely blank), or is it simply hiding the admin functions? - Jordan Reiteris_staffis required by the admin. If you have some reason why these users can't have that set to true, I think your best option is to write your own admin views. With access controls like thehas_permissiondecorator you can enforce your own authorization scheme. - Paul Bissex