为什么Principal不是模型,但是Role,RoleMapping,ACL是突然的模型?

时间:2015-11-05 10:16:55

标签: loopbackjs strongloop

我正在阅读Loopback(https://docs.strongloop.com/display/public/LB/Authentication%2C+authorization%2C+and+permissions)的访问控制概念,我不明白Principal不是模型的情况,RoleRoleMappingACL是具有完整REST API方法的模型,并列在model-config.json中?当我尝试在Principal中加入model-config.json以及RoleRoleMappingACL时出错:

"ACL": {
    "dataSource": "db",
    "public": false
},
"RoleMapping": {
    "dataSource": "db",
    "public": false
},
"Role": {
    "dataSource": "db",
    "public": false
},
"Principal": {
    "dataSource": "db",
    "public": true
},

错误:

throw new Error('Model not found: ' + modelName);
      ^
Error: Model not found: Principal

这里的逻辑在哪里? Principal与其他人排成一行,但不是模特。为什么呢?

1 个答案:

答案 0 :(得分:2)

让我们首先明确一下,校长是什么?

根据文档, Principal是可以识别或验证的实体。它表示对受保护资源的请求的身份。例如:可以对user实例进行身份验证以执行create请求。因此,user实例可以是主体。

如果我们可以使用userapplicationrole代替主体,那么在核心环回

但是如果您按照文档看到Class Principal

此类表示委托人的抽象概念,可用于表示任何实体,例如个人,公司和登录ID 。该类有三个属性:type,id和name。此type字段指定将哪个模型用于主体。可以通过多种方式创建principal类实例。例如,对于role模型实例,如

role.principals.create({
    principalType: app.models.RoleMapping.USER,
    principalId: admin.id
}, function(err, principal) {
    if (err) {
        throw err;
    } else {
        next();
    }
});

在这里,我们为principal实例创建了新的role实例。现在,此主体可用于验证请求。另外,通知principalType用于定义用于创建主体的模型。

注意: 我希望,现在, principal使用可以唯一标识的其他模型实例是有意义的,因此可用于验证对受保护资源的请求,如create休息端点。

现在收到的错误是因为没有定义为Principal的模型。在引导应用程序时,它没有在Loopback核心模型中找到Principal模型或为我们的应用程序生成模型,因此它抛出了错误

throw new Error('Model not found: ' + modelName);
      ^
Error: Model not found: Principal