我正在使用loopback framework。
在阅读文档here和here之后,我还不清楚何时将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/