RoleMapping.USER或RoleMapping.ROLE&ACL

我正在使用回环框架 。

我不清楚什么时候将RoleMapping与静态angular色和ACL一起使用,在阅读这里和这里的文档之后。

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

在我看来,当我声明用户angular色,我必须使用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" } 

但是不是很清楚,每次我都要去debugging它,每次我都要pipe理新的angular色或新的ACL时,会有一些黑暗的魔法和祈祷。

有没有人可以解释我该怎么做?

(只是把这个答案…)

在第一个代码块中,您正在创build一个用户和一个angular色,然后将该用户添加到该angular色。 在第二个模块(ACL模型configuration)中,允许angular色(以及其中的任何人)对模型执行操作(特别是在这种情况下执行setApprove()方法)。 这两项行动协同工作分别提供授权和authentication。

为了解决后续评论,模型configurationACL中的principalType"ROLE"因为您希望该angular色中的任何人都能够执行该操作。 如果您改为使用principalType "USER"则必须将principalId更改为新的用户ID,并且您只会授权该用户(无论angular色中的哪个用户)采取该操作。