2017-10-14 16 views
1

このガイドhttp://www.keycloak.org/docs/3.2/server_development/topics/user-storage.htmlを使用してユーザーフェデレーションを構成しています。これは正常に動作し、ユーザーはログインできます。KeyCloakユーザーフェデレーションとダイナミックロール

ユーザーは、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

を拡張します。それはUserEntityレベルではなく、UserModel上で行います。

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

RoleModelはインターフェイスです。既存のヘルパークラスがあるか、それらのメソッドをすべて実装する必要があります。 – chege

+0

既存のロールはユーザーにのみ割り当てることができます。これを使用して既存のロールを取得することができます。 realm.getClientByClientId(clientId).getRole(roleName); – Boomer

関連する問題