How to get a list of all users with a specific permission group in Django

Viewed 66463

I want to get a list of all Django auth user with a specific permission group, something like this:

user_dict = {
    'queryset': User.objects.filter(permisson='blogger')
}

I cannot find out how to do this. How are the permissions groups saved in the user model?

9 Answers

If you want to get list of users by permission, look at this variant:

from django.contrib.auth.models import User, Permission
from django.db.models import Q

perm = Permission.objects.get(codename='blogger')  
users = User.objects.filter(Q(groups__permissions=perm) | Q(user_permissions=perm)).distinct()

This would be the easiest

from django.contrib.auth import models

group = models.Group.objects.get(name='blogger')
users = group.user_set.all()

I think for group permissions, permissions are stored against groups, and then users have groups linked to them. So you can just resolve the user - groups relation.

e.g.

518$ python manage.py shell

(InteractiveConsole)
>>> from django.contrib.auth.models import User, Group
>>> User.objects.filter(groups__name='monkeys')
[<User: cms>, <User: dewey>]

Groups are many-to-many with Users (you see, nothing unusual, just Django models...), so the answer by cms is right. Plus this works both ways: having a group, you can list all users in it by inspecting user_set attribute.

Try this:

User.objects.filter(groups__permissions = Permission.objects.get(codename='blogger'))
Related