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

我正在阅读Loopback(
https://docs.strongloop.com/display/public/LB/Authentication%2C+authorization%2C+and+permissions)的访问控制概念,我不明白Principal不是一个模型,但是Role,RoleMapping,ACL是具有完整REST API方法的模型,并列在model-config中以.json?当我试图在model-config.json中包含Principal以及Role,RoleMapping和ACL时出现错误:

"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是可以识别或验证的实体.它表示对受保护资源的请求的身份.例如:可以对用户实例进行身份验证以执行创建请求.因此,该用户实例可以是主体.

如果我们可以使用用户,应用程序或角色代替主体,那么在核心环回中创建另一个模型是没有意义的.

但是如果根据文档看到Class Principal,

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

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

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

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

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

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