我正在阅读Loopback(https://docs.strongloop.com/display/public/LB/Authentication%2C+authorization%2C+and+permissions)的访问控制概念,我不明白Principal
不是模型的情况,Role
,RoleMapping
,ACL
是具有完整REST API方法的模型,并列在model-config.json
中?当我尝试在Principal
中加入model-config.json
以及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
与其他人排成一行,但不是模特。为什么呢?
答案 0 :(得分:2)
让我们首先明确一下,校长是什么?
根据文档, Principal是可以识别或验证的实体。它表示对受保护资源的请求的身份。例如:可以对user
实例进行身份验证以执行create
请求。因此,user
实例可以是主体。
如果我们可以使用user
,application
或role
代替主体,那么在核心环回
但是如果您按照文档看到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