我正在阅读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