环回 - ACL - 默认角色在启用自定义角色时不起作用

时间:2018-03-24 17:47:55

标签: node.js acl loopbackjs

我有很少的自定义角色,例如" 1" - >'超级管理员'" 2" - >' TeamMember&#39 ; ...我在数据库中维护我的ACL列表而不是JSON。

使用案例 - 在Logged in case中,如果有SuperAdmin,他可以使用ACL列表中定义的模型。工作正常。 - 此外,与teamMember角色合作正常。

  • 但是,在未经验证的情况下,既没有任何SuperAdmin / teamMember角色(例如:登录页面API),那么登录API调用也没有成功,它总是等待'。呼叫未完成,错误/成功。在这种情况下,我希望处理$everyone角色。我已在ACL表中正确地将$everyoneROLE一起编写为ALLOW

ACL未被搜查。

DEBUG清单:

loopback:security:role isInRole(): $everyone +0ms
loopback:security:access-context ---AccessContext--- +0ms
loopback:security:access-context principals: [] +0ms
loopback:security:access-context modelName user +0ms
loopback:security:access-context modelId undefined +0ms
loopback:security:access-context property loginUser +0ms
loopback:security:access-context method loginUser +0ms
loopback:security:access-context accessType EXECUTE +0ms
loopback:security:access-context accessToken: +0ms
loopback:security:access-context   id "$anonymous" +0ms
loopback:security:access-context   ttl 1209600 +0ms
loopback:security:access-context getUserId() null +0ms
loopback:security:access-context isAuthenticated() false +0ms
loopback:security:role Custom resolver found for role $everyone +0ms  

角色的旋转变压器:

//SUPER ADMIN
Role.registerResolver("1", function(role, context, cb) {
    let isSuperAdmin = false;
        app.models.RoleMapping.findOne({where: {principalId: userId}}, function(err, res){ //userId will be passed from other obj...it will be not null...here i just made it simple
            if(res.roleId == "1")
                isSuperAdmin = true;
            return cb(null, isSuperAdmin);
        });
});

由于这个原因,我无法登录我的应用程序。 我正在扩展默认的用户模型,并编写了一个remoteMethod' loginUser'来执行用户登录。 (即使默认情况下登录'远程方法在这种情况下也不起作用)

但是,如果删除角色解析程序脚本,则不会遇到任何问题。登录成功 ,API返回成功令牌。我似乎只有解析器的问题,但无法找到问题。请帮我解决这个问题。

我的扩展模型user的ACLS:(适用于SuperAdmin和所有人)

Col Names: id, model, property, accessType, permission, principalType, principalId

Rows: '1', 'user', '*', '*', 'ALLOW', 'ROLE', '1' '2', 'user', '*', '*', 'ALLOW', 'ROLE', '$everyone'

表中的principalType: '1'表示superAdmin。

0 个答案:

没有答案