mirror of
https://github.com/django/django.git
synced 2025-08-04 02:48:35 +00:00
Fixed #8936 -- Added a view permission and a read-only admin.
Co-authored-by: Petr Dlouhy <petr.dlouhy@email.cz> Co-authored-by: Olivier Dalang <olivier.dalang@gmail.com>
This commit is contained in:
parent
35b6a348de
commit
825f0beda8
32 changed files with 579 additions and 96 deletions
|
@ -11,7 +11,7 @@ from django.contrib.admin.widgets import (
|
|||
AdminDateWidget, AdminRadioSelect, AutocompleteSelect,
|
||||
AutocompleteSelectMultiple,
|
||||
)
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.models import Permission, User
|
||||
from django.db import models
|
||||
from django.forms.widgets import Select
|
||||
from django.test import SimpleTestCase, TestCase
|
||||
|
@ -676,6 +676,18 @@ class ModelAdminTests(TestCase):
|
|||
self.assertEqual(perms_needed, set())
|
||||
self.assertEqual(protected, [])
|
||||
|
||||
def test_get_actions_requires_change_perm(self):
|
||||
user = User.objects.create_user(username='bob', email='bob@test.com', password='test')
|
||||
mock_request = MockRequest()
|
||||
mock_request.user = user
|
||||
mock_request.GET = {}
|
||||
ma = ModelAdmin(Band, self.site)
|
||||
self.assertEqual(list(ma.get_actions(mock_request).keys()), [])
|
||||
p = Permission.objects.get(codename='change_band', content_type=get_content_type_for_model(Band()))
|
||||
user.user_permissions.add(p)
|
||||
mock_request.user = User.objects.get(pk=user.pk)
|
||||
self.assertEqual(list(ma.get_actions(mock_request).keys()), ['delete_selected'])
|
||||
|
||||
|
||||
class ModelAdminPermissionTests(SimpleTestCase):
|
||||
|
||||
|
@ -683,6 +695,10 @@ class ModelAdminPermissionTests(SimpleTestCase):
|
|||
def has_module_perms(self, app_label):
|
||||
return app_label == 'modeladmin'
|
||||
|
||||
class MockViewUser(MockUser):
|
||||
def has_perm(self, perm):
|
||||
return perm == 'modeladmin.view_band'
|
||||
|
||||
class MockAddUser(MockUser):
|
||||
def has_perm(self, perm):
|
||||
return perm == 'modeladmin.add_band'
|
||||
|
@ -695,6 +711,22 @@ class ModelAdminPermissionTests(SimpleTestCase):
|
|||
def has_perm(self, perm):
|
||||
return perm == 'modeladmin.delete_band'
|
||||
|
||||
def test_has_view_permission(self):
|
||||
"""
|
||||
has_view_permission() returns True for users who can view objects and
|
||||
False for users who can't.
|
||||
"""
|
||||
ma = ModelAdmin(Band, AdminSite())
|
||||
request = MockRequest()
|
||||
request.user = self.MockViewUser()
|
||||
self.assertIs(ma.has_view_permission(request), True)
|
||||
request.user = self.MockAddUser()
|
||||
self.assertIs(ma.has_view_permission(request), False)
|
||||
request.user = self.MockChangeUser()
|
||||
self.assertIs(ma.has_view_permission(request), True)
|
||||
request.user = self.MockDeleteUser()
|
||||
self.assertIs(ma.has_view_permission(request), False)
|
||||
|
||||
def test_has_add_permission(self):
|
||||
"""
|
||||
has_add_permission returns True for users who can add objects and
|
||||
|
@ -702,6 +734,8 @@ class ModelAdminPermissionTests(SimpleTestCase):
|
|||
"""
|
||||
ma = ModelAdmin(Band, AdminSite())
|
||||
request = MockRequest()
|
||||
request.user = self.MockViewUser()
|
||||
self.assertFalse(ma.has_add_permission(request))
|
||||
request.user = self.MockAddUser()
|
||||
self.assertTrue(ma.has_add_permission(request))
|
||||
request.user = self.MockChangeUser()
|
||||
|
@ -735,6 +769,8 @@ class ModelAdminPermissionTests(SimpleTestCase):
|
|||
"""
|
||||
ma = ModelAdmin(Band, AdminSite())
|
||||
request = MockRequest()
|
||||
request.user = self.MockViewUser()
|
||||
self.assertIs(ma.has_change_permission(request), False)
|
||||
request.user = self.MockAddUser()
|
||||
self.assertFalse(ma.has_change_permission(request))
|
||||
request.user = self.MockChangeUser()
|
||||
|
@ -749,6 +785,8 @@ class ModelAdminPermissionTests(SimpleTestCase):
|
|||
"""
|
||||
ma = ModelAdmin(Band, AdminSite())
|
||||
request = MockRequest()
|
||||
request.user = self.MockViewUser()
|
||||
self.assertIs(ma.has_delete_permission(request), False)
|
||||
request.user = self.MockAddUser()
|
||||
self.assertFalse(ma.has_delete_permission(request))
|
||||
request.user = self.MockChangeUser()
|
||||
|
@ -763,6 +801,8 @@ class ModelAdminPermissionTests(SimpleTestCase):
|
|||
"""
|
||||
ma = ModelAdmin(Band, AdminSite())
|
||||
request = MockRequest()
|
||||
request.user = self.MockViewUser()
|
||||
self.assertIs(ma.has_module_permission(request), True)
|
||||
request.user = self.MockAddUser()
|
||||
self.assertTrue(ma.has_module_permission(request))
|
||||
request.user = self.MockChangeUser()
|
||||
|
@ -773,6 +813,8 @@ class ModelAdminPermissionTests(SimpleTestCase):
|
|||
original_app_label = ma.opts.app_label
|
||||
ma.opts.app_label = 'anotherapp'
|
||||
try:
|
||||
request.user = self.MockViewUser()
|
||||
self.assertIs(ma.has_module_permission(request), False)
|
||||
request.user = self.MockAddUser()
|
||||
self.assertFalse(ma.has_module_permission(request))
|
||||
request.user = self.MockChangeUser()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue