Parse.com, Добавление пользователей в созданные роли

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

Parse.Cloud.afterSave("account", function(request) {
    var accountName = request.object.get("name");

    //create admin role
    var adminRoleACL = new Parse.ACL();
    adminRoleACL.setPublicWriteAccess(true);
    var adminRole = new Parse.Role(accountName + "_Administrator", adminRoleACL);
    adminRole.save() ; 

    //create user role
    var userRoleACL = new Parse.ACL();
    userRoleACL.setPublicWriteAccess(true);
    var userRole = new Parse.Role(accountName + "_User", userRoleACL);
    userRole.save();
});

Теперь я хотел добавить пользователя, который только что подписался на эти две роли. Но, к сожалению, я увидел, что в облачном коде я не могу получить текущего пользователя. Итак, что я сделал, так это добавил пользователей в роль после того, как роли созданы на стороне клиента. Ниже приведен код для того же самого. Код выполняется нормально, и я не видел никаких ошибок, однако я не видел, чтобы пользователи добавлялись к ролям в браузере данных. Любая идея, почему это происходит? Я что-то упускаю. Я был бы очень благодарен за вашу помощь.

user.signUp(null, {
    success : function(user) {
        var currentUser = Parse.User.current();

        var accountName = account.get("name");

        var query = new Parse.Query(Parse.Role);
        query.contains("name", accountName);

        query.find({
            success : function(roles) {
                if (!roles) {
                    alert("No roles for " + accountName + " were found");
                } else {
                    for (var i = 0; i < roles.length; i++) {
                        //add the user for admin role
                        //TODO: this needs to be done only once for the account owner
                        if (roles[i].get("name").search(USER_TYPE.ADMIN) >= 0) {
                            roles[i].getUsers().add(currentUser);
                        }

                        //add the user for user role
                        if (roles[i].get("name").search(USER_TYPE.USER) >= 0) {
                            roles[i].getUsers().add(currentUser);
                        }
                        var saved = roles[i].save();
                    }
                    alert("User was added into roles");
                }
            },
            error : function(error) {
                alert("Could not add users to the account " + accountName + " error: " + error.message);
            }
        });

        alert("User created successfully");
    },
    error : function(user, error) {
        alert("Error: " + error.code + " " + error.message);
    }
});

person Raghvendra Singh    schedule 23.09.2013    source источник


Ответы (2)


Спасибо за помощь. Я делаю это с помощью облачного кода, подобного этому

  1. Создайте роли при создании учетной записи.

    Parse.Cloud.afterSave("account", function(request) {
    
        var accountName = request.object.get("name");
        //create admin role
        var adminRoleACL = new Parse.ACL();
        adminRoleACL.setPublicReadAccess(false);
        adminRoleACL.setPublicWriteAccess(false);
        var adminRole = new Parse.Role(accountName + "_Administrator", adminRoleACL);
        adminRole.save();
    
        //create user role
        var userRoleACL = new Parse.ACL();
        userRoleACL.setPublicReadAccess(false);
        userRoleACL.setPublicWriteAccess(false);
        var userRole = new Parse.Role(accountName + "_User", userRoleACL);
        userRole.save();
    });
    
  2. Затем добавьте пользователей в созданную роль

    Parse.Cloud.define("addUsersToRole", function(request, response) {
    
        Parse.Cloud.useMasterKey();
        var currentUser = request.user;
        var accountName = request.params.accountname;
        var isAdmin = request.params.admin;
    
        var query = new Parse.Query(Parse.Role);
        query.contains("name", accountName);
        query.find({
            success : function(roles) {
                console.log("roles: " + roles.length);
                for (var i = 0; i < roles.length; i++) {
    
                    if ( isAdmin = false && roles[i].get("name").search("_Administrator") >= 0)
                        continue;
    
                    roles[i].getUsers().add(currentUser);
                    roles[i].save();
                }
                response.success();
            },
            error : function(error) {
                response.error("error adding to admin role " + error);
            }
        });
    });
    
person Raghvendra Singh    schedule 26.09.2013

На самом деле вы можете получить доступ к пользователю, который выполняет запрос, см. Документацию по облачному коду для получения дополнительной информации. Детали.

В частности, вам нужно посмотреть на request.user:

var currentUser = request.user;
person Timothy Walters    schedule 24.09.2013
comment
Спасибо за ответ. В документации для request.user указано, что этот пользователь — Parse.User, который делает запрос. Это не будет установлено, если не было зарегистрированного пользователя. Я пытаюсь добавить пользователей при регистрации, поэтому пользователь не вошел в систему и, следовательно, имеет значение null. Поэтому я думаю, что это можно сделать, только вызвав другую облачную функцию, которая делает это после входа в систему. - person Raghvendra Singh; 24.09.2013
comment
Кто сохраняет объект учетной записи? Сохранение пользователя, которое будет отображаться как request.user в Cloud Code. - person Timothy Walters; 25.09.2013