KeyCloak用户联合和动态角色

3
我将使用这个指南http://www.keycloak.org/docs/3.2/server_development/topics/user-storage.html来配置用户联合。这很好用,我的用户可以登录。
我的用户存储在MySQL数据库中。不同的用户有不同的角色,这些角色也存储在MySQL中。
我不确定如何将角色添加到UserModel中。
我已经实现了getUserXXX方法。
例如:
@Override
public UserModel getUserByEmail(String email, RealmModel realm) {
    LOGGER.info("LOADING BY EMAIL");
    try (Connection connection = ds.getConnection()) {
        try (PreparedStatement statement = connection.prepareStatement("select * from user where email = ?")) {
            statement.setString(1, email);
            try (ResultSet rs = statement.executeQuery()) {
                if (rs.next()) {
                    UserEntity user = new UserEntity();
                    user.setEmail(rs.getString("email"));
                    user.setId(rs.getString("email"));
                    user.setPassword(rs.getString("password"));
                    return new UserAdapter(session, realm, model, user);
                }
            }
        }
    } catch (SQLException ex) {
        LOGGER.error(ex.getMessage(), ex);
    }

    return null;

}

我现在想给每个登录的用户添加特定的角色。我该如何做?

我的UserAdapter扩展了AbstractUserAdapterFederatedStorage。

1个回答

1

我在几个实现中都使用了下面这种方法来完成。请在UserModel而不是UserEntity级别上执行。

void updateRoles(UserModel user, List<RoleModel> rolesToRemove, List<RoleModel> rolesToAdd)
{
    for (RoleModel role : rolesToRemove)
    {
        user.deleteRoleMapping(role);
    }
    for (RoleModel role : rolesToAdd)
    {
        user.grantRole(role);
    }
}

RoleModel是一个接口。是否存在现有的帮助类或者我必须实现所有这些方法? - chege
{btsdaf} - Boomer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接