2016-06-24 64 views
0

我有一個應用程序,您可以在沒有經過認證的情況下開始下訂單,並在付款的最後一步之前註冊。這意味着我的模型訂單首先在沒有任何所有者的情況下創建和更新以保存數據,然後在過程結束時附加userId。如果沒有設置所有者,則使用環回ACL

如何創建一個ACL允許:

大家來執行,如果沒有業主 如果有一個老闆,只有所有者可以在其上運行的一切。 目前,有些訂單有userId爲空,而其他一些訂單已設置,如果我想列出我的訂單(例如,已認證的用戶),我有401。

感謝很多提前

回答

0

我完成了創建新的自定義角色的成功,被稱爲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" 
}, 
+0

如何設置model.userId?您是否在模型中創建了屬性,然後在創建時將其分配給中間件?或者是使用$ owner屬性爲你做這個事情嗎?請參閱http://stackoverflow.com/questions/39970066/loopback-io-model-acl-principalid-owner – steve76

+0

你只需要設置一個屬於與用戶模型的關係,並且Loopback處理它! – Ghislaindj

+0

是的,但功能有限,就像你需要在請求中指定帖子ID一樣。 GET所有記錄都不適用於權限,無論是批量更新。 – steve76

相關問題