diff --git a/database/schema.py b/database/schema.py
index 5f9c8e5adcf50a59c98a95a3b4847775c13e064e..9ccbc33381f7fa32d0b68bf88ac056e4d0019565 100644
--- a/database/schema.py
+++ b/database/schema.py
@@ -53,6 +53,22 @@ class CreateRole(graphene.Mutation):
         return CreateRole(role=role)
 
 
+class AddRoleToUser(graphene.Mutation):
+    class Arguments:
+        username = graphene.String(required=True)
+        role = graphene.String(required=True)
+
+    user = graphene.Field(User)
+    role = graphene.Field(Role)
+
+    def mutate(self, info, username, role):
+        user = user_datastore.db.session().query(UserModel).filter_by(username=username).first()
+        role = user_datastore.find_role(role)
+        user_datastore.add_role_to_user(user, role)
+        user_datastore.commit()
+        return AddRoleToUser(user=user,role=role)
+
+
 class Query(graphene.ObjectType):
     node = relay.Node.Field()
     all_users = SQLAlchemyConnectionField(User)
@@ -65,6 +81,7 @@ class Query(graphene.ObjectType):
 class Mutation(graphene.ObjectType):
     create_user = UserMutation.Field()
     create_role = CreateRole.Field()
+    add_role_to_user = AddRoleToUser.Field()
 
 
 schema = graphene.Schema(query=Query, types=[User, Role, Application], mutation=Mutation)
diff --git a/test/test_graphql.py b/test/test_graphql.py
index ea12ff11c9c2f8a85c1de16869649f279a0fcd0c..4ddedacaec46c869464c73b92604d4c417429a8a 100644
--- a/test/test_graphql.py
+++ b/test/test_graphql.py
@@ -72,7 +72,7 @@ class GraphQlTests(LiveServerTestCase):
         '''.format(username, password, email).strip()
         return loads(self.client.execute(querystring))
 
-    def test_create_role(self):
+    def test_create_and_assign_role(self):
         role_name = "testusers"
         role_description = "A role assigned to users during unittests"
         result = self._create_role(role_name, role_description)
@@ -82,6 +82,52 @@ class GraphQlTests(LiveServerTestCase):
         role = result["data"]["createRole"]["role"]
         self.assertEqual(role["name"], role_name)
         self.assertEqual(role["description"], role_description)
+        username = "graphqluser2"
+        password = "randompassword"
+        email = "user2@example.com"
+        self._create_user(username, password, email)
+        querystring = '''
+        mutation{{
+          addRoleToUser(
+            username: "{0}",
+            role: "{1}"){{
+              user{{
+                username,
+                roles{{
+                  edges{{
+                    node{{
+                      name
+                    }}
+                  }}
+                }}
+              }}
+              role{{
+                name,
+                description
+                users{{
+                  edges{{
+                    node{{
+                      username
+                    }}
+                  }}
+                }}
+              }}
+           }}
+        }}
+        '''.format(username, role_name).strip()
+        result = loads(self.client.execute(querystring))
+        self.assertIn("data", result)
+        self.assertIn("addRoleToUser", result["data"])
+        user = result["data"]["addRoleToUser"]["user"]
+        self.assertEqual(username, user["username"])
+        self.assertIn("edges", user["roles"])
+        roles = user["roles"]["edges"]
+        self.assertEqual(role_name, roles[0]["node"]["name"])
+        role = result["data"]["addRoleToUser"]["role"]
+        self.assertEqual(role_name, role["name"])
+        self.assertIn("edges", role["users"])
+        users = role["users"]["edges"]
+        self.assertEqual(username, users[0]["node"]["username"])
 
     def _create_role(self, name, description):
         querystring = '''