Joke.boforeRemote('findById', function(context, joke, next) {
// 1. find current user by id, using context.req.accessToken.userId
// 2. check if he is owner or not, by Role.isOwner
// 3. remove email from returned joke instance if user is not $owner
})
3 回答
注册beforeRemote hook并检查当前用户是否为$owner .
注意:覆盖所有返回Jokes的 endpoints 可能有点复杂 . 但还有另一种方法吗?
要修改 output / results,可以使用 afterRemote 钩子,根据docs . 输出/结果存储在ctx.result中 .
当呼叫类似于
GET http://myModel/id
时,'findById'挂钩到您的GET请求中 . 如果您的请求中未包含ID,请使用'find',例如GET http://myModel
. 请注意,在'find'的情况下,返回的实例(笑话)通常不只是一个,因此它在一个对象数组中 .获取当前登录用户的ID:
var currentUser = context.req.accessToken.userId
将当前登录用户的用户ID与笑话所有者的用户ID进行比较 . 如果两者不相同(即
if (!(currentUser == joke.userId))
),那么:在调用next()之前
,从返回的笑话实例中删除email属性 . 因为有时某些方法不起作用,这里有几个:
delete ctx.result.email;
ctx.result.email = '';
循环遍历属性并将它们传输到新的var,除了电子邮件,然后保存新的var结果:
ctx.result = newVar;
您可以创建自己的角色解析器 . 有关示例,请参阅https://github.com/strongloop/loopback-example-access-control/blob/master/server/boot/role-resolver.js . 确定用户后,只需添加自己的逻辑 .