0
0
mirror of https://github.com/django/django.git synced 2024-11-29 22:56:46 +01:00
django/tests/admin_views/custom_has_permission_admin.py
François Freitag 9ef4a18dbe Changed django.forms.ValidationError imports to django.core.exceptions.ValidationError.
Co-Authored-By: Mariusz Felisiak <felisiak.mariusz@gmail.com>
2020-04-28 10:49:00 +02:00

32 lines
1.0 KiB
Python

"""
A custom AdminSite for AdminViewPermissionsTest.test_login_has_permission().
"""
from django.contrib import admin
from django.contrib.auth import get_permission_codename
from django.contrib.auth.forms import AuthenticationForm
from django.core.exceptions import ValidationError
from . import admin as base_admin, models
PERMISSION_NAME = 'admin_views.%s' % get_permission_codename('change', models.Article._meta)
class PermissionAdminAuthenticationForm(AuthenticationForm):
def confirm_login_allowed(self, user):
if not user.is_active or not (user.is_staff or user.has_perm(PERMISSION_NAME)):
raise 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)