我目前只是在一个角度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人。
答案 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);
});