Added GraphQL "me" query to get user permissions

This commit is contained in:
Daniel Egger 2018-10-04 18:24:10 +02:00
parent a204de4098
commit 1574b8fbcc
2 changed files with 27 additions and 3 deletions

View File

@ -8,7 +8,22 @@ from django.utils.translation import ugettext_lazy as _
class User(AbstractUser):
pass
def get_school_permissions(self, school):
perms = set()
for role in SchoolRole.objects.get_school_roles_for_user(self):
perms = perms.union(
('{}.{}'.format(r.content_type.app_label, r.codename) for r in role.role_permission.all())
)
return perms
def get_all_permissions(self, obj=None):
"""
works as long as we have only a single school
:param obj:
:return: django permissions and school permissions for single default school
"""
django_permissions = super().get_all_permissions(obj)
return django_permissions.union(self.get_school_permissions(School.objects.get(pk=1)))
class School(models.Model):

View File

@ -8,15 +8,20 @@ from user.models import UserGroup, User
class UserNode(DjangoObjectType):
pk = graphene.Int()
permissions = graphene.List(graphene.String)
class Meta:
model = User
filter_fields = ['username', 'email']
only_fields = ['username', 'email', 'first_name', 'last_name', 'usergroup_set', ]
interfaces = (relay.Node,)
def resolve_pk(self, *args, **kwargs):
def resolve_pk(self, info, **kwargs):
return self.id
def resolve_permissions(self, info):
return self.get_all_permissions()
class UserGroupNode(DjangoObjectType):
pk = graphene.Int()
@ -31,6 +36,10 @@ class UserGroupNode(DjangoObjectType):
class UsersQuery(object):
me = graphene.Field(UserNode)
all_users = DjangoFilterConnectionField(UserNode)
user_group = relay.Node.Field(UserGroupNode)
user_groups = DjangoFilterConnectionField(UserGroupNode)
def resolve_me(self, info, **kwargs):
return info.context.user