Moanos
Moanos

Reputation: 324

Restricting view by model permissions fails in django

Very basically I have a model member and want to restrict searching members to allowed users. I use the following in the corresponding view

if request.user.has_perm('view_member'):
    context['user_list'] = get_user(q)

Sadly this does not work even if

a) I give a user this permission via the admin interface

b) in my tests that look a bit like the following

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

For further tests I used the debugging mode of PyCharm to go into the test. In the console I then executed the following


>>> 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

I would expect true here.

Upvotes: 2

Views: 104

Answers (1)

Moanos
Moanos

Reputation: 324

I forgot the app name 🙈 It should be

if request.user.has_perm('appname.view_member'):
    context['user_list'] = get_user(q)

Upvotes: 1

Related Questions