parse swift добавить нового пользователя в существующую роль

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

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

Код для создания роли (работает нормально)

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

                   //roleACL.setPublicWriteAccess(true)

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

                   role.saveInBackground()

Код для добавления пользователя в указанную роль (работает, если доступ для записи установлен как общедоступный)

                    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)


person Brian    schedule 17.11.2015    source источник


Ответы (1)


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

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

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);
                        }
                    });
                    },
                });
            }
        });
});
person user3524762    schedule 17.11.2015