2017-02-07 1 views
0

Мне нужно изменить значение массива от «Пользователь» до «Администратора», если функция нажата, и мне нужно закодировать его в облачном коде.Как изменить массив ролей разбора при нажатии кнопки с облачным кодом и Шашидо?

но есть проблема, массив не меняет

следующий код работает, но только часть с nameRoleQuerry не работает, и это часть которым мне нужно изменить.

promoteToAdmin: function promoteToAdmin(request, response) { 
    if (!request.params.companyUser) { 
     response.error('Request did not have an authenticated user attached with it'); 
    } else { 
     var companyUser; 
     var companyUserQuery = new Parse.Query('CompanyUser'); 
     companyUserQuery.include('user'); 
     companyUserQuery.include('company'); 
     companyUserQuery.get(request.params.companyUser, { 
      useMasterKey: true 
     }).then((giveRolename) => { 
         var nameRoleQuery = new Parse.Query(Parse.Role); 
         request.nameRoleQuery.set('user', ['Admin']); 
         return nameRoleQuery.save(null, { 
          useMasterKey: true 
         }); 
        }).then((companyUserObject) => { 
      companyUser = companyUserObject; 
      var userRoleQuery = new Parse.Query(Parse.Role); 
      userRoleQuery.equalTo('name', 'Company-User-' + companyUser.get('company').id); 
      return userRoleQuery.first({ 
       useMasterKey: true 
      }); 
     }).then((userRole) => { 
      var usersInUserRole = userRole.relation('users'); 
      usersInUserRole.remove(companyUser.get('user')); 
      return userRole.save(null, { 
       useMasterKey: true 
      }); 
     }).then((userRoleSaveResult) => { 
      var adminRoleQuery = new Parse.Query(Parse.Role); 
      adminRoleQuery.equalTo('name', 'Company-Admin-' + companyUser.get('company').id); 
      return adminRoleQuery.first({ 
       useMasterKey: true 
      }); 
     }).then((adminRole) => { 
      var usersInAdminRole = adminRole.relation('users'); 
      usersInAdminRole.add(companyUser.get('user')); 
      return adminRole.save(null,{ 
       useMasterKey: true 
      }); 
        }).then((saveResult) => { 
         console.log('after'); 
      response.success('fissa is aan'); 
     }, (error) => { 
      console.log(error); 
     }); 
        console.log(); 
    } 

} 

enter image description here

массив роль должна измениться.

+0

Что такое 'request.nameRoleQuery'? Кажется немного запутанным, когда вы пытаетесь сохранить имяRoleQuery. Сначала вы создаете 'Parse.Query' для' Parse.Role', затем устанавливаете свойство на этом объекте 'request.nameRoleQuery', а затем пытаетесь сохранить' Parse.Query'. Можете прояснить, что вы пытаетесь сделать? – EReid

+0

Я пытаюсь изменить роль от пользователя к администратору через обещания, но я не знаю, правильно ли это, я попробовал кое-что там. –

ответ

1

Все еще не уверен, что именно вы пытаетесь сделать, но это то, что я думаю, вы хотите, чтобы это произошло.

CompanyUser имеет указатель под названием «пользователь» типа Parse.User. Вы хотите обновить этот Parse.User на основе вашего изображения при запуске этого запроса. Должно работать следующее:

 //AS ABOVE 
      .then((giveRolename) => { 
        var user = giveRoleName.get("user"); 
        user.remove('role','user'); 
        user.add('role','admin'); 
        return user.save(null, {useMasterKey:true}); 
      }).then((companyUserObject) => { 
//companyUserObject is Parse.User object. If CompanyUser object is needed, store in variable beforehand. 

Я поставил ниже то, что я предлагаю в качестве улучшения вашего текущего кода. Он менее последователен и обеспечивает большую ошибку в ошибке, происходящей в середине процесса. Это без функции стрелок, поэтому вам придется соответствующим образом изменить.

function promoteToAdmin(request, response) { 

    var params = request.params; 
    var companyUserId = params["companyUser"]; 

    var companyUser; 

    return Parse.Promise.as().then(
     function() 
     { 
      if(!companyUser) 
      { 
       return Parse.Promise.error("Request did not have an user attached with it."); 
      } 
      var CompanyUser = Parse.Object.extend("CompanyUser"); 
      var companyUserQuery = new Parse.Query(CompanyUser); 
      companyUserQuery.include("user"); 
      companyUserQuery.include("company"); 
      return companyUserQuery.get(companyUserId,{useMasterKey:true}); 

     } 
    ).then(
     function(fetchedCompanyUser) 
     { 
      companyUser = fetchedCompanyUser; 
      var company = companyUser.get("company"); 

      var userRoleQuery = new Parse.Query(Parse.Role); 
      userRoleQuery.equalTo('name', "Company-User-" + company.id) 

      var adminRoleQuery = new Parse.Query(Parse.Role); 
      adminRoleQuery.equalTo('name', "Company-Admin-" + company.id); 


      return Parse.Promise.when(
       userRoleQuery.first({useMasterKey:true}), 
       adminRoleQuery.first({useMasterKey:true}) 
      ) 

     } 
    ).then(
     function(userRole,adminRole) 
     { 
      if(!userRole || !adminRole) 
      { 
       return Parse.Promise.error("No role found") 
      } 

      var user = companyUser.get("user"); 

      user.remove("role","user"); 
      user.add("role","admin"); 

      userRole.getUsers().remove(user); 
      adminRole.getUsers().add(user); 


      return Parse.Promise.when(
       user.save(null,{useMasterKey:true}), 
       userRole.save(null,{useMasterKey:true}), 
       adminRole.save(null,{useMasterKey:true}) 
      ) 

     } 
    ).then(
     function(user,userRole,adminRole) 
     { 
      response.success("success"); 
     }, 
     function(error) 
     { 
      response.error(error); 
     } 
    ) 

} 
Смежные вопросы