【问题标题】:Why Principal is not a model, but Role, RoleMapping, ACL are suddenly models?为什么 Principal 不是模型,而 Role、RoleMapping、ACL 突然变成模型了?
【发布时间】:2015-11-06 17:17:26
【问题描述】:

我正在阅读 Loopback (https://docs.strongloop.com/display/public/LB/Authentication%2C+authorization%2C+and+permissions) 的访问控制概念,但我不明白 Principal 不是模型,但 RoleRoleMappingACL 是具有全套 REST API 方法并列在model-config.json?当我尝试在model-config.json 中包含Principal 以及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 与其他人一致,但不是模特。为什么?

【问题讨论】:

  • 感谢您提出这个问题。想问问自己。

标签: loopbackjs strongloop


【解决方案1】:

我们先说清楚,什么是委托人?

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

如果我们可以使用userapplicationrole 代替principal,那么在core loopback 中创建另一个模型是没有意义的。

但如果您根据文档看到Class Principal

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

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

在这里,我们为role 实例创建了新的principal 实例。现在,此主体可用于对请求进行身份验证。另外,注意principalType 用于定义用于创建主体的模型。

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

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

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

【讨论】:

  • 但我无法弄清楚应用程序如何成为主体。不过很好的解释。谢谢!
  • 这里已经讨论过了:github.com/strongloop/loopback-example-access-control/issues/31。好吧,直到我们从维护者那里得到一个例子,它在那里授权其他应用程序访问环回 api。这就像应用程序级授权
猜你喜欢
  • 1970-01-01
  • 2020-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-30
  • 1970-01-01
相关资源
最近更新 更多