我正在使用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/