Added GraphQL "me" query to get user permissions
This commit is contained in:
parent
a204de4098
commit
1574b8fbcc
|
|
@ -8,7 +8,22 @@ from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
|
||||||
class User(AbstractUser):
|
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):
|
class School(models.Model):
|
||||||
|
|
|
||||||
|
|
@ -8,15 +8,20 @@ from user.models import UserGroup, User
|
||||||
|
|
||||||
class UserNode(DjangoObjectType):
|
class UserNode(DjangoObjectType):
|
||||||
pk = graphene.Int()
|
pk = graphene.Int()
|
||||||
|
permissions = graphene.List(graphene.String)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
filter_fields = ['username', 'email']
|
filter_fields = ['username', 'email']
|
||||||
|
only_fields = ['username', 'email', 'first_name', 'last_name', 'usergroup_set', ]
|
||||||
interfaces = (relay.Node,)
|
interfaces = (relay.Node,)
|
||||||
|
|
||||||
def resolve_pk(self, *args, **kwargs):
|
def resolve_pk(self, info, **kwargs):
|
||||||
return self.id
|
return self.id
|
||||||
|
|
||||||
|
def resolve_permissions(self, info):
|
||||||
|
return self.get_all_permissions()
|
||||||
|
|
||||||
|
|
||||||
class UserGroupNode(DjangoObjectType):
|
class UserGroupNode(DjangoObjectType):
|
||||||
pk = graphene.Int()
|
pk = graphene.Int()
|
||||||
|
|
@ -31,6 +36,10 @@ class UserGroupNode(DjangoObjectType):
|
||||||
|
|
||||||
|
|
||||||
class UsersQuery(object):
|
class UsersQuery(object):
|
||||||
|
me = graphene.Field(UserNode)
|
||||||
|
all_users = DjangoFilterConnectionField(UserNode)
|
||||||
user_group = relay.Node.Field(UserGroupNode)
|
user_group = relay.Node.Field(UserGroupNode)
|
||||||
|
|
||||||
user_groups = DjangoFilterConnectionField(UserGroupNode)
|
user_groups = DjangoFilterConnectionField(UserGroupNode)
|
||||||
|
|
||||||
|
def resolve_me(self, info, **kwargs):
|
||||||
|
return info.context.user
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue