我只是想知道如何限制对$ owner角色的属性访问。例如在我的情况下,我有一个有作者的笑话。作者以用户为基础。我希望其他“Authers”/用户看看是谁创建了笑话,但他们不应该看到Authers电子邮件,只有当作者是笑话本身的$ owner时才可以显示他们的电子邮件,只是为了这个案子。
查看内置的用户模型,您可以看到他们使用隐藏功能来隐藏密码,但是使用它来存储他们的电子邮件也会隐藏他们的电子邮件给$ owner,这是不是我想要的
如果有什么不清楚,请告诉我。
提前致谢
答案 0 :(得分:2)
注册beforeRemote hook并检查当前用户是否为$owner。
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
})
注意:覆盖所有返回Jokes的端点可能有点复杂。但还有另一种方法吗?
答案 1 :(得分:1)
要修改输出 /结果,您可以按照docs使用 afterRemote 挂钩。输出/结果存储在ctx.result。
中' findById'当呼叫类似@SuppressWarnings("serial")
class MyRenderer extends DefaultTableCellRenderer {
private static final int ALPHA = 60;
private Color chefColor;
private Color defaultColor;
public MyRenderer(Color chefColor, Color defaultColor) {
this.chefColor = chefColor;
this.defaultColor = defaultColor;
setOpaque(true);
setHorizontalAlignment(SwingConstants.CENTER);
}
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column) {
Component superComp = super.getTableCellRendererComponent(table, value, isSelected,
hasFocus, row, column);
if (value != null) {
MyTableModel tableModel = (MyTableModel) table.getModel();
boolean chef = tableModel.getEmployee(row).isChef();
Color c = chef ? chefColor : defaultColor;
if (!hasFocus && !isSelected) {
c = new Color(c.getRed(), c.getGreen(), c.getBlue(), ALPHA);
}
superComp.setBackground(c);
}
return superComp;
}
}
时,挂钩到您的GET请求中。使用'找到'如果您未在请求中包含该ID,例如GET http://myModel/id
。请注意,在' find'的情况下,返回的实例(笑话)通常不只是一个,因此它在一个对象数组中。
GET http://myModel
Joke.afterRemote('findById', function(ctx, joke, next) {
//your code
});
var currentUser = context.req.accessToken.userId
),则:在调用next()之前,从已返回的笑话实例中删除email属性。因为有时某些方法不起作用,这里有几个:
if (!(currentUser == joke.userId))
delete ctx.result.email;
ctx.result.email = '';
答案 2 :(得分:-1)
您可以创建自己的角色解析程序。有关示例,请参阅https://github.com/strongloop/loopback-example-access-control/blob/master/server/boot/role-resolver.js。只需在确定用户后添加自己的逻辑。