RoleMapping.USER 或 RoleMapping.ROLE & ACL

RoleMapping.USER or RoleMapping.ROLE & ACL

我正在使用 loopback framework

在阅读了文档 here and here.

之后,我不太清楚何时将 RoleMapping 与静态角色和 ACL 一起使用

我有一个启动脚本,我在我的应用程序中插入了一些主要的静态角色(管理员、批准者、验证者等),我在 ACL 中使用这些角色。

在我看来,当我声明用户角色时,我必须使用 RoleMapping.USER:

const approver = yield app.models.User.create({
  email: 'approver@lorem.com',
  password: 'secret-apprpver-123',
  status: 'active',
  emailVerified: true
});

const roleApprover = yield app.models.Role.findOne({
  where: {name: 'approver'}
});

yield app.models.RoleMapping.create({
  principalId: approver.id,
  principalType: app.models.RoleMapping.USER,
  roleId: roleApprover.id
});

虽然在 ACL 中我必须使用 RoleMapping.ROLE:

{
  "principalType": "ROLE",

  "accessType": "EXECUTE",
  "principalId": "approver",
  "permission": "ALLOW",
  "property": "setApprove"
}

但不是很清楚,每次调试都很头疼,每次管理新角色或新ACL时都会有一些黑魔法和祈祷。

有没有人可以告诉我该怎么做?

(只是将其放入答案中...)

在第一个代码块中,您将创建一个用户和一个角色,然后将该用户添加到角色中。在第二个块(ACL 模型配置)中,您允许该角色(以及其中的任何人)对模型执行操作(特别是在本例中执行 setApprove() 方法)。这两个动作协同工作,分别提供授权和认证。

为了解决后续评论,模型配置 ACL 中的 principalType"ROLE",因为您希望担任该角色的任何人都能够执行该操作。如果您改用 principalType "USER",则必须将 principalId 更改为新的用户 ID,并且您将只授权一个用户(无论该角色中的角色是谁)采取该行动。