diff --git a/src/graphql/schema.js b/src/graphql/schema.js
index 7b67f3c4e26d717b329539466449c32485b9c66e..7fc2e6062cc9612489d787105902d2d42875318b 100644
--- a/src/graphql/schema.js
+++ b/src/graphql/schema.js
@@ -4,9 +4,10 @@
 */
 
 import knex from '../../db/knex_router';
-import { rens, idTOL, listGroups, listMembers } from '../ldap/ldap_data';
+import { rens, idTOL, listGroups, listMembers, listAdmins } from '../ldap/ldap_data';
 import { makeExecutableSchema } from 'graphql-tools';
 import { request } from 'https';
+import { assertBinaryExpression } from 'babel-types';
 
 const typeDefs = `
     type Query {
@@ -34,11 +35,12 @@ const typeDefs = `
 
     type Mutation {
         createGroup(
-            uid: ID, 
+            uid: ID = null, 
             name: String,
-            website: String
-            description: String
-            school: String 
+            website: String,
+            description: String,
+            school: String,
+            parentuid : String
         ): Group
     }
 
@@ -81,9 +83,39 @@ const getGroupIfVisible = (user, uid) => {
     });
 };
 
+/**
+ * @summary Renvoie tous les utilisateurs ayant des droits d'administrateur sur un groupe.
+ * @desc Les utilisateurs qui ont un droit d'administrateur sur un groupe sont ses administrateurs et les utilisateurs ayant droit d'admin sur son parent
+ * @arg {String} uid - L'uid du groupe dont on veut les administrateurs. 
+ * @return {Promise} Retour de requête knex. Promise qui renvera une liste de tous les utilisateurs ayant droit d'admin sur le groupe
+ */
+const getUsersWithAdminRights = (uid) => {
+    return listAdmins(uid);
+};
+
+/**
+ * @summary Attribue un UID qui n'a pas encore été utilisé à un groupe
+ * @desc RASifie le string initialUID si necessaire (ramené à de l'ASCCI sans espace), puis si l'uid est deja pris rajoute un n a la fin et reteste
+ * @arg {String} uid - L'uid du groupe dont on veut les administrateurs. 
+ * @return {Promise} Retour de requête knex. Promise qui renvera une liste de tous les utilisateurs ayant droit d'admin sur le groupe
+ */
+const getAvailableGroupUID = (initialUID) => {
+    let rasUID = initialUID;
+}
+
 const createGroupIfLegal = (user, args) => {
+    if(typeof args.parentuid != String)
+        throw "Illegal argument : parentuid must be a string";
+    let admins = getUsersWithAdminRights(args.parentuid)
+    if(typeof admins == undefined)
+        throw "invalid argument : no group with id " + args.parentuid;
+    return admins.then( admin_list => {
+        if(admin_list.indexOf(user.id) == -1)
+            throw "illegal request : you must have admin rights over a group to create a subgroup of that group";
+        
+    });
     
-}
+};
 
 const resolvers = {
     Query: {