LoopBack ACL无法正常工作

时间:2017-04-03 20:14:16

标签: javascript json node.js loopbackjs strongloop

我创建了一个继承自LoopBack User模型的模型MyUser。在启动脚本中,我在MyUser模型中创建了一个用户,自定义角色并将该角色映射到该角色。但是在MyUser.json文件中分配后,ACL无法正常工作。

Bootscript.js

'use strict';

module.exports = function(app) {

var User = app.models.MyUser;
var Role = app.models.Role;
var RoleMapping = app.models.RoleMapping;
User.findOrCreate({ name: "Administrator", email: "admin@user.com", username: "admin", password: "12345" }, function(err, succ) {
    if (err) {
        console.log(err);
    } else {
        Role.create({ name: "superUser" }, function(err, role) {
            if (err) {
                console.log(err);
            } else {
                console.log("Role created successfuly");
                role.principals.create({ principalType: RoleMapping.USER, principalId: succ.id }, function(err, success) {
                    if (err) {
                        console.log(err);
                    } else {
                        console.log("role mapped successfuly");
                    }
                });
            }
        });
    }
});

};

MyUser.json

"acls": [
{
  "accessType": "*",
  "principalType": "ROLE",
  "principalId": "superUser",
  "permission": "ALLOW"
}
]

但是当我在api explorer中访问MyUser.find(获取所有用户)方法时,它说

{
"error": {
"statusCode": 401,
"name": "Error",
"message": "Authorization Required",
"code": "AUTHORIZATION_REQUIRED",
"stack": "Error: Authorization Required\n    at ...
}
}

我做错了什么?

2 个答案:

答案 0 :(得分:0)

我认为401返回,因为findOrCreate不返回创建的实例id。

尝试控制succ.id,如果是这种情况则使用upsert而不是

答案 1 :(得分:0)

默认情况下,用户的ACL很少。你需要先清除它。他们在这里存储

  app.models.User.settings.acls = [];

在启动时尝试此操作