2015-11-17 5 views
1

Может ли кто-то просто подтвердить, что для добавления пользователя в существующую роль роль должна быть прочитана публикой & write access?parse swift добавить нового пользователя в существующую роль

как кажется, это единственный способ заставить его работать?

код для создания роли (работает отлично)

    let roleACL = PFACL() 
        roleACL.setPublicReadAccess(true) 

        //roleACL.setPublicWriteAccess(true) 

        let role = PFRole(name: "ClubName", acl:roleACL) 

        role.saveInBackground() 

код для добавления пользователя к указанной роли (Works Если доступ установлен общественности)

    let QueryRole = PFRole.query() 

        QueryRole!.whereKey("name", equalTo: "ClubName") 

        QueryRole!.getFirstObjectInBackgroundWithBlock({ (roleObject: PFObject?, error: NSError?) -> Void in 

         if error == nil 

         { 

          let roleToAddUser = roleObject as! PFRole 

          roleToAddUser.users.addObject(user) 

          roleToAddUser.saveInBackground() 

          //print(roleObject) 

         } 

         else 

         { 

          print(error) 

          //print(roleObject) 

         } 


        }) 

выше код работает, но как я сказал, только когда публичный доступ на запись к роли был установлен верно.

это сводит меня с ума Теперь

также если роль предназначается, чтобы иметь доступ общественности записи не которые делают его уязвимым для кого-то меняющегося роль?

Если роль не должна иметь публичный доступ для записи, тогда кто-то может указать мне в правильном направлении, чтобы заставить вышеуказанный код работать без установки роли с открытым доступом для записи.

ошибки я получаю, если нет доступа общественности записи о роли является: объекта не найдена для обновления (Код: 101 Версия: 1.8.1)

ответ

0

Почему бы не выполнить всю работу в облаке вместо этого вы столкнетесь с проблемой проблемы чтения/записи. Вот что я делаю.

Важно отметить: приведенный ниже код не будет работать, если для JDK облачного кода установлено значение «последний», мне пришлось установить его в JDK 1.5, а затем изменить код облака.

Parse.Cloud.afterSave(Parse.User, function(request) { 

      Parse.Cloud.useMasterKey(); 
      var user = request.object; 
      if (user.existed()) { 
       //console.log('object exits'); 
       response.success(); 
       // console.log('********return after save'); 
       return; 
      }  

      // set ACL so that it is not public anymore 
      var acl = new Parse.ACL(user); 
      acl.setPublicReadAccess(false); 
      acl.setPublicWriteAccess(false); 
      user.setACL(acl); 
      user.save(); 
      //add user to role   
      var query = new Parse.Query(Parse.Role); 
      query.equalTo("name", "signedmember"); 
      query.first().then(function(object) { 
      if (object) { 
       object.relation("users").add(request.user); 
       object.save(null, { 
        success: function(saveObject) { 
        object.relation("users").add(request.user); 
        object.save(null, { 
         success: function(saveObject) { 
          // The object was saved successfully. 
          console.log('assigned user to role'); 
         }, 
         error: function(saveObject, error) { 
          // The save failed. 
          console.error("Failed creating role with error: " + error.code + ":"+ error.message); 
         } 
        }); 
        }, 
       }); 
      } 
     }); 
});