loopback angular sdk获取具有特定角色的所有用户

时间:2015-06-19 04:00:41

标签: angularjs loopbackjs

我目前只是在一个角度SDK控制器中让所有具有某些角色的用户,例如管理员用户。

根据strongloop的文档。我做的是:

User.find({
  filter: {
    include: [{'relation':'roles', 'scope': {
      where:{
        name:'admin',
      }}
    }],
  },
}, function(list) {
  console.log(list);
});

但我获得的列表是所有用户,非管理员用户也包括在内。在服务器端,它是默认代码,我没有更改它们。

{
  "name": "user",
  "plural": "Users",
  "base": "User",
  "properties": {

  },
  "relations": {
    "roles": {
      "type": "belongsTo",
      "model": "RoleMapping",
      "foreignKey": "principalId"
    }
  },
  "acls": [],
  "methods": []
}
你可以告诉我我做错了什么吗?我不想遍历该查询中的所有“列表”并过滤管理员用户,因为它是一个非常庞大的用户列表,但管理员只有2或3人。

2 个答案:

答案 0 :(得分:2)

以下是我所做的解决方案,来自common / models / user.js,我创建了一个名为“getUsersByRole”的remotemethod,并且只接受“role”,这是角色的名称:

User.remoteMethod('getUsersByRole', {
  accepts: [
    { arg: 'role', type: 'string', required: true },
  ],
  returns: {arg: 'users', type: 'string'},
  http: {
    verb: 'get',
    path: '/byrole/:role'
  }
});

然后这是它的功能:

User.getUsersByRole = function(role, cb) {
    var loopback = require('loopback');
    var Role = loopback.getModel('Role');
    var userIdList = [];
    Role.findOne({include:'principals', where: {name:role}}, function(err, role) {
      role.principals(function(err, principals) {
        for (var i = 0; i < principals.length; i++) {
          userIdList.push(parseInt(principals[i].principalId));
        }
        if (userIdList.length > 0) {
          User.find({where: {id: {inq: userIdList}}}, function(err, users) {
            cb(err, users);
          });
        } else {
          cb(err, false);
        }
      });
    });
}

然后运行lb-ng命令为角客户端生成服务,然后运行:

User.getUsersByRole({role:rolename}, function(list) {
});

在控制器中。

答案 1 :(得分:0)

您可以从角色运行查询吗?

 Role.find({
      filter: {
        where: {name:'admin'},
        include: {'relation':'users'}            
      },
    }, function(list) {
      console.log(list);
    });