【问题标题】:How to authenicate using static role in Loopback ACL如何在 Loopback ACL 中使用静态角色进行身份验证
【发布时间】:2019-02-28 15:54:54
【问题描述】:

在模型中使用静态角色访问控制进行身份验证时遇到问题。将 ACL 与主体类型 $authenticated 和 $everyone 一起使用时,事情似乎正在发挥作用。因此,登录和注销时访问控制已到位并按预期运行。当 ACL 转移到静态角色时,身份验证失败并返回 401。正在使用为角色、角色映射和用户构建的环回模型。我尝试使用 ROLE 和 USER 作为 principalTypes。

使用 RoleMapping 创建用户、角色和主体:

User.create({
    username: 'admin',
    email: 'admin@admin.com',
    password: 'password',
    active: true
}, 
function (err, user) {
    Role.create({
        name: 'Admin'
    }, 
    function (err, role) {
        if (err) throw err;

        console.log('Created role:', role);

        //make user an admin
        role.principals.create({
            principalType: RoleMapping.USER,
            //principalType: RoleMapping.ROLE,
            principalId: user.id,
            active: true
        }, 
        function (err, principal) {
            if (err) throw err;

            console.log('Principal:', principal);
        });
    });
});


客户模型:

"name": "Customer",
"base": "PersistedModel",
"strict": false,
"idInjection": false,
"options": {
    "validateUpsert": true
},
"properties": {
    "name": {
        "type": "string",
        "required": true
    },
    "description": {
        "type": "string"
    },
    "active": {
        "type": "boolean"
    }
},
"validations": [],
"relations": {
    "products": {
        .........
    },
    "users": {
        .........
    }
},
"acls": [
    {
        "accessType": "*",
        "principalType": "ROLE",
        "principalId": "$everyone",
        "permission": "DENY"
    },
    {
        WORKS AS EXPECTED
        "accessType": "*",
        "principalType": "ROLE",
        "principalId": "$authenticated",
        "permission": "ALLOW"
    },
    {
        RETURNS 401 AFTER LOGGING IN AS USER ASSIGNED TO ROLE
        "accessType": "*",
        "principalType": "ROLE",
        "principalId": "Admin",
        "permission": "ALLOW"
    }
],
"methods": []

已创建用户记录:

"_id" : ObjectId("55b7c34d6033a33758038c3b"),
"username" : "admin",
"password" : ....,
"email" : "admin@admin.com",
"active" : true


角色记录:

"_id" : ObjectId("55b7c34d6033a33758038c3e"),
"name" : "Admin",
"created" : ISODate("2015-07-28T18:00:45.336Z"),
"modified" : ISODate("2015-07-28T18:00:45.336Z")


角色映射记录:

"_id" : ObjectId("55b7c34d6033a33758038c41"),
"principalType" : "USER",
"principalId" : "55b7c34d6033a33758038c3b",
"roleId" : ObjectId("55b7c34d6033a33758038c3e"),
"active" : true

在此先感谢您的帮助!

【问题讨论】:

标签: loopbackjs


【解决方案1】:

当您在 principalId 中定义用户时,请尝试改用:

principalId: user[0].id,

【讨论】:

    【解决方案2】:

    请注意:

    RoleMapping.principalType: USER(意思是用户,不是 ROLE)

    RoleMapping.principalId: USER_ID(因为定义 RoleMapping.principalType 是 USER)

    acls: [ { "principalType": "角色", “principalId”:“管理员”, } ]

    我已经测试过了,它正在工作

    Role
    —————————
    _id: ObjectId(5c70409a98103f1af6ee2b55)
    name: “admin”,
    description: “Only Admin can write”,
    
    
    Role Mapping
    ——————————
    _id: ObjectId(5c7040f998103f1af6ee2b57)
    principalType: USER
    principalId: 5c72b9ef79dcf14443c1aa3b
    roleId: ObjectId(5c70409a98103f1af6ee2b55)
    
    
    User
    ——————————
    _id: ObjectId(5c72b9ef79dcf14443c1aa3b)
    firstName: “”,
    lastName: “”,
    email:””,
    Active:””,
    emailVerified:
    
    ACL
     {
          "accessType": "WRITE",
          "principalType": "ROLE",
          "principalId": "admin",
          "permission": "ALLOW"
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-25
      • 2021-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-23
      • 2020-05-30
      • 1970-01-01
      相关资源
      最近更新 更多