StrongLoop 在每次上模型前修改数据
StrongLoop modify data before each get on model
我在 LoopBackJS 中有以下模型:
{
"name": "member",
"base": "PersistedModel",
"properties": {
"firstName": {
"type": "string"
}
"public": {
"type": "boolean"
}
},
"relations": {
"spouse": {
"type": "hasOne",
"model": "spouse",
"foreignKey": "spouseId"
}
}
}
现在我需要修改 firstName
字段,这样一个人只能看到 "public": true
个成员的名字,其他人得到 firstName: "*"
。这个功能我已经有了。
但是我如何访问每个数据访问请求的数据?
我用操作挂钩试了一下,例如find, findOne,... 但是当我错过其中一个时,一些用户可以访问 firstName。
使用远程挂钩也是一样。
现在我正在尝试使用连接器挂钩:
connector.observe('after execute', function(ctx, next) {
if (ctx.model === 'familyMember') {
if (ctx.req.command === 'find') {
}
}
next();
});
对于所有查找查询 (mongodb),但我无法访问这些数据。有没有办法访问这些数据?或者对于这个问题有更好的(内置)解决方案吗?
您需要在每次远程操作后检查结果:
member.afterRemote('**', function(ctx, modelInstance, next) {
if (ctx.result) {
if (Array.isArray(modelInstance)) {
var answer = [];
ctx.result.forEach(function (result) {
if(result.public === false)
result.firstName = "*";
answer.push(result);
});
} else {
var answer =ctx.result;
if(answer.public === false)
answer.firstName = "*";
}
ctx.result = answer;
}
next();
});
我在 LoopBackJS 中有以下模型:
{
"name": "member",
"base": "PersistedModel",
"properties": {
"firstName": {
"type": "string"
}
"public": {
"type": "boolean"
}
},
"relations": {
"spouse": {
"type": "hasOne",
"model": "spouse",
"foreignKey": "spouseId"
}
}
}
现在我需要修改 firstName
字段,这样一个人只能看到 "public": true
个成员的名字,其他人得到 firstName: "*"
。这个功能我已经有了。
但是我如何访问每个数据访问请求的数据?
我用操作挂钩试了一下,例如find, findOne,... 但是当我错过其中一个时,一些用户可以访问 firstName。 使用远程挂钩也是一样。
现在我正在尝试使用连接器挂钩:
connector.observe('after execute', function(ctx, next) {
if (ctx.model === 'familyMember') {
if (ctx.req.command === 'find') {
}
}
next();
});
对于所有查找查询 (mongodb),但我无法访问这些数据。有没有办法访问这些数据?或者对于这个问题有更好的(内置)解决方案吗?
您需要在每次远程操作后检查结果:
member.afterRemote('**', function(ctx, modelInstance, next) {
if (ctx.result) {
if (Array.isArray(modelInstance)) {
var answer = [];
ctx.result.forEach(function (result) {
if(result.public === false)
result.firstName = "*";
answer.push(result);
});
} else {
var answer =ctx.result;
if(answer.public === false)
answer.firstName = "*";
}
ctx.result = answer;
}
next();
});