解析swift将新用户添加到现有角色

时间:2015-11-17 21:09:33

标签: ios parse-platform swift2.1

有人可以确认,为了将用户添加到现有角色,该角色需要公开阅读& 访问?

因为这似乎是我能让它发挥作用的唯一方法吗?

创建角色的代码(工作正常)

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

                   //roleACL.setPublicWriteAccess(true)

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

                   role.saveInBackground()

将用户添加到所述角色的代码(Works如果写入访问权限设置为public)

                    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)

1 个答案:

答案 0 :(得分: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);
                        }
                    });
                    },
                });
            }
        });
});