如何获取与acl角色对应的所有用户?

时间:2017-01-31 10:06:59

标签: javascript html angularjs parsing parse-platform

我需要从该角色获得所有用户。我已经知道了这个代码,但我不知道如何从角色中获取用户。

我只知道我需要在角色上使用getUsers()功能,但我遇到了问题。

我的代码:

self.getCompanyUsers = function getCompanyUsers() {
    $rootScope.displayLoading = true;
    var userQuery = new Parse.Query(Parse.Role);
    userQuery.contains('name', $state.params.id);

    userQuery.find().then(function(roles) {
        $scope.users = roles;
        $rootScope.displayLoading = false;      
    }).then(function() { 
        console.log(roles.getUsers());

    })
};

1 个答案:

答案 0 :(得分:1)

您提供的代码似乎存在一些问题,以前需要修复。

首先;你的承诺流程似乎有点过时了。你试图继续它而不返回任何东西。我不确定为什么你需要在承诺链中这样做,因为你不必等待任何事情完成。所以你应该删除第二个then,除非你从你发布的代码中省略了一些东西。

其次;你试图在一个Parse.Role数组上调用getUsers()。根据此功能的最终用途,有几种方法:

  • 您可以将userQuery.find()更改为userQuery.first(),这只会返回一个对象,而roles.getUsers()将有效。
  • 或者,您可以循环显示从现有查询中获得的结果,并在每个查询上调用getUsers()。我建议这不是你想要做的,因为它可能会导致对User对象进行大量查询,如果这是你想要的,可能会有更好的选择。

第三; getUsers()将只返回Parse.Relation,而不是角色中的用户。要获取用户,您必须首先获取查询对象。如此:role.getUsers().query();

这是一个普通的Parse.Query,您可以这样使用它。例如,role.getUsers().query().find()

如果我思考正确,你会想要类似的东西:

    self.getCompanyUsers = function getCompanyUsers() {
        $rootScope.displayLoading = true;
        var userQuery = new Parse.Query(Parse.Role);
        userQuery.contains('name', $state.params.id);
        userQuery.first().then(function(role) {
            $scope.users = role;


            if(!role)
            {
                //check a role has been found
                return Parse.Promise.error("No role found")
            }

            //role.getUsers() will be the Parse.Relation
            //role.getUsers().query() will be a normal Parse.Query
            return role.getUsers().query().find();

        }).then(function(users)
            {
                //users will be an array of the users in the role, depending on ACL/CLP.
                console.log(users);
                $rootScope.displayLoading = false;
            }
        )
    };