Ограничение просмотра по разрешениям модели не работает в django
В основном у меня есть модель member и я хочу ограничить поиск членов разрешенными пользователями. Я использую следующее в соответствующем представлении
if request.user.has_perm('view_member'):
context['user_list'] = get_user(q)
К сожалению, это не работает, даже если
a) Я даю пользователю это разрешение через интерфейс администратора
b) в моих тестах, которые выглядят примерно следующим образом
def test_user_search_view(self):
self.client.login(username='testuser0', password='12345') # this is a user that was given the permission (see below)
response = self.client.post(reverse('library:search'), data={'q': "Müller"})
# Check our user is logged in
self.assertEqual(str(response.context['user']), 'testuser0') # Works
self.assertContains(response, "Max") # Fails, but Max should be there
Для дальнейших тестов я использовал режим отладки PyCharm, чтобы зайти в тест. Затем в консоли я выполнил следующее
>>> permission_view_user = Permission.objects.get(codename='view_member')
>>> test_user0.user_permissions.add(permission_view_user)
>>> test_user0.save() # For good luck
>>> user = get_object_or_404(User, pk=test_user0.pk)
>>> user.has_perm(permission_view_user)
False
Я бы ожидал здесь true.
Я забыл название приложения 🙈. Оно должно быть
if request.user.has_perm('appname.view_member'):
context['user_list'] = get_user(q)