summaryrefslogtreecommitdiff
path: root/tests/admin_views/custom_has_permission_admin.py
diff options
context:
space:
mode:
authorThomas Tanner <tanner@gmx.net>2014-12-31 22:25:00 +0100
committerTim Graham <timograham@gmail.com>2014-12-31 16:31:59 -0500
commit46068d850d8debd3611ed6499d48b9907bf07ef6 (patch)
treec82c79ff71e611e31dab2bbe1d1e1b9348e5d14e /tests/admin_views/custom_has_permission_admin.py
parent7a878ca5cb50ad65fc465cb263a44cc93629f75c (diff)
Fixed #22295 -- Replaced permission check for displaying admin user-tools
Diffstat (limited to 'tests/admin_views/custom_has_permission_admin.py')
-rw-r--r--tests/admin_views/custom_has_permission_admin.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/admin_views/custom_has_permission_admin.py b/tests/admin_views/custom_has_permission_admin.py
new file mode 100644
index 0000000000..6c15a9805a
--- /dev/null
+++ b/tests/admin_views/custom_has_permission_admin.py
@@ -0,0 +1,33 @@
+"""
+A custom AdminSite for AdminViewPermissionsTest.test_login_has_permission().
+"""
+from __future__ import unicode_literals
+
+from django.contrib import admin
+from django.contrib.auth import get_permission_codename
+from django.contrib.auth.forms import AuthenticationForm
+
+from . import models, admin as base_admin
+
+PERMISSION_NAME = 'admin_views.%s' % get_permission_codename('change', models.Article._meta)
+
+
+class PermissionAdminAuthenticationForm(AuthenticationForm):
+ def confirm_login_allowed(self, user):
+ from django import forms
+ if not user.is_active or not (user.is_staff or user.has_perm(PERMISSION_NAME)):
+ raise forms.ValidationError('permission denied')
+
+
+class HasPermissionAdmin(admin.AdminSite):
+ login_form = PermissionAdminAuthenticationForm
+
+ def has_permission(self, request):
+ return (
+ request.user.is_active and
+ (request.user.is_staff or request.user.has_perm(PERMISSION_NAME))
+ )
+
+
+site = HasPermissionAdmin(name="has_permission_admin")
+site.register(models.Article, base_admin.ArticleAdmin)