我完成了創建新的自定義角色的成功,被稱爲softOwner
。萬一有人需要它,這裏是代碼:
module.exports = function(app) {
var Role = app.models.Role;
Role.registerResolver('softOwner', function(role, context, cb) {
function reject(err) {
if(err) {
return cb(err);
}
cb(null, false);
}
var userId = context.accessToken.userId;
if (!userId) {
return reject(); // do not allow anonymous users
}
context.model.findById(context.modelId, function(err, model) {
if(err || !model) {
reject(err);
}
if(model.userId) {
// if there is an owner, check that it is the right owner
(model.userId == context.accessToken.userId) ? cb(null, true) : reject();
} else {
// if there is no owner, authorize
cb(null, true);
}
});
});
};
然後只需添加它的ACL:
{
"accessType": "*",
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY"
},
{
"accessType": "WRITE",
"principalType": "ROLE",
"principalId": "softOwner",
"permission": "ALLOW"
},
如何設置model.userId?您是否在模型中創建了屬性,然後在創建時將其分配給中間件?或者是使用$ owner屬性爲你做這個事情嗎?請參閱http://stackoverflow.com/questions/39970066/loopback-io-model-acl-principalid-owner – steve76
你只需要設置一個屬於與用戶模型的關係,並且Loopback處理它! – Ghislaindj
是的,但功能有限,就像你需要在請求中指定帖子ID一樣。 GET所有記錄都不適用於權限,無論是批量更新。 – steve76