node.js - RoleMapping.USER 或 RoleMapping.ROLE & ACL

标签 node.js acl loopbackjs

我正在使用loopback framework .

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

我有一个启动脚本,我在应用程序中插入一些主要静态角色(管理员、批准者、验证者等),并在 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 时都会遇到一些黑暗魔法和祈祷。

有没有人可以帮我解释一下怎么做?

最佳答案

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

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

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

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

相关文章:

postgresql - 无法连接到数据库 : Loopback + Heroku + Postgres: ECONNREFUSED 127. 0.0.1:5432

node.js - Nodejs 和网络套接字

elasticsearch - 无论如何,是否有阻止访问Elasticsearch内置API(例如/_nodes)的信息? ,/_ cluster,/_ cat等?

node.js - Loopback 3 - 如何使用 datasources.json 中发送电子邮件的替代方法

amazon-web-services - 如何从被授权者的账户访问共享 S3 存储桶(通过 ACL 共享)

grails - 使用Spring Security限制对Grails中的域类gorm方法的访问

javascript - 在远程服务器上时不显示 Strongloop Loopback 资源管理器

node.js - 在嵌套对象数组中过滤 geo_point

node.js - 监听 EADDRINUSE:地址已在使用中:::5000

javascript - 如何在开发模式下运行 hyperledger-fabric Node js 链代码?