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):
|
||||
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):
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue