【问题标题】:Keycloak - using admin API to add client roles to users using a loopKeycloak - 使用管理 API 通过循环向用户添加客户端角色
【发布时间】:2020-11-17 21:46:58
【问题描述】:

我正在尝试使用 nodejs 将 keycloak 分配角色分配给用户函数。我能够使用用户 ID、客户端 ID 和角色(名称、ID)一次分配单个用户,但我想编写一个方法我可以获取所有用户 id 并获取我已经完成的所有角色 id 和名称,并且基本上循环分配方法,这样我就可以一个一个地为每个用户分配一个角色,直到循环结束

Function AssignRole(适用于单用户)

let userUUID = "0a850afa-dda1-427f-859c-2512dcb55e17"
let kc_clientUUID = "fb1b263c-88d5-4a45-9e18-2098451b5862"
function AssignRole(userUUID, roleId, roleName, kc_clientUUID, kc_accessToken) {
    let urlAssignRole = `${path}/users/${userUUID}/role-mappings/clients/${kc_clientUUID}`;
    return axios({
        method: 'post',
        url: urlAssignRole,
        data: [{ id: roleId, name: roleName }],
        headers: {
            'content-type': 'application/json',
            'Authorization': `Bearer ${kc_accessToken}`
        }
    })
        .then(function (response) {
            console.log("Role Assigned!!");
        })
        .catch(function (error) {
            console.log(error);
        });
}

函数调用工作

      GetUser(userid, kc_accessToken).then((resp) => {
           userid = resp.data.map(user => user.id);
            console.log("User Ids");
            console.log(userid);
        })

      GetRole(roleId, roleName, kc_accessToken).then((resp) => {
           roleId = resp.data.map(role => role.id);
           roleName = resp.data.map(role => role.name);
            console.log("Role Id and Names");
            console.log(roleId);
            console.log(roleName);

        })

         AssignRole(userUUID, "3b178b5b-b323-4bb6-b8d3-a6c2d342fd72", "role4", kc_clientUUID, kc_accessToken).then((resp) => {

                })

现在我有一个用户列表和一个角色列表我如何使用循环将每个角色分配给每个用户?

这是我的代码

函数调用不工作

        GetUser(userid, kc_accessToken).then((resp) => {
            userid = resp.data.map(user => user.id);

            GetRole(roleId, roleName, kc_accessToken).then((resp) => {
                roleId = resp.data.map(role => role.id);
                roleName = resp.data.map(role => role.name);

                // Assign roles to all the user
                AssignRole(userid, roleId, roleName, kc_clientUUID, 
           kc_accessToken).then((resp) => {

                })
            })
        })

【问题讨论】:

    标签: javascript node.js arrays loops keycloak


    【解决方案1】:

    我对javascript不太了解,但根据您展示的内容:

    userid = resp.data.map(user => user.id);
    

    返回一个用户ID数组而不是单个用户ID,这同样适用于角色, 所以我会说以下代码应该可以工作:

    GetUser(userid, kc_accessToken).then((resp) => {
                userid = resp.data.map(user => user.id);
    
                GetRole(roleId, roleName, kc_accessToken).then((resp) => {
                    roleId = resp.data.map(role => role.id);
                    roleName = resp.data.map(role => role.name);
    
                    for (var i=0; i < userID.length; i++) {  
                       for (var j=0; j < roleId.length; j++) {
                            AssignRole(userid[i], roleId[j], roleName[j], kc_clientUUID, kc_accessToken) ....
                       }
                    }
    
                    
                })
            })
    

    语法可能已经关闭,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-19
      • 2021-11-01
      • 2021-12-15
      • 2023-03-06
      • 2023-03-29
      • 1970-01-01
      • 2023-04-03
      • 2021-09-06
      相关资源
      最近更新 更多