我正在使用loopback framework

在阅读文档herehere之后,我还不清楚何时将RoleMapping与静态角色和ACL一起使用。

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

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

const approver = yield app.models.User.create({
  email: '[email protected]',
  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,并且只授权该用户(无论角色是谁)执行该操作。

关于node.js - RoleMapping.USER或RoleMapping.ROLE和ACL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34856157/

10-16 21:17