RoleMapping.USER 或 RoleMapping.ROLE & ACL
RoleMapping.USER or RoleMapping.ROLE & ACL
我正在使用 loopback framework。
之后,我不太清楚何时将 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,并且您将只授权一个用户(无论该角色中的角色是谁)采取该行动。
我正在使用 loopback framework。
之后,我不太清楚何时将 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,并且您将只授权一个用户(无论该角色中的角色是谁)采取该行动。