0

I want that user roles uploaded from db in keycloak. I have wrote RoleSPI for this, but roles don't load. My role-provider is displayed on server info.

server info

I I created CustomRoleProvider:

public class CustomRoleProvider implements RoleProvider {
 @Override
    public RoleModel addRealmRole(RealmModel realmModel, String s, String s1) {
        return null;
    }

    @Override
    public Stream<RoleModel> getRealmRolesStream(RealmModel realmModel, Integer integer, Integer integer1) {
        return null;
    }

    @Override
    public Stream<RoleModel> getRolesStream(RealmModel realmModel, Stream<String> stream, String s, Integer integer, Integer integer1) {
        return null;
    }

    @Override
    public boolean removeRole(RoleModel roleModel) {
        return false;
    }

    @Override
    public void removeRoles(RealmModel realmModel) {

    }

    @Override
    public RoleModel addClientRole(ClientModel clientModel, String s, String s1) {
        return null;
    }

    @Override
    public Stream<RoleModel> getClientRolesStream(ClientModel clientModel, Integer integer, Integer integer1) {
        return null;
    }

    @Override
    public void removeRoles(ClientModel clientModel) {

    }

    @Override
    public void close() {

    }

    @Override
    public RoleModel getRealmRole(RealmModel realmModel, String s) {
        System.out.println("getRealmRole()");
        return roleModel;
    }

    @Override
    public RoleModel getRoleById(RealmModel realmModel, String s) {
        System.out.println("getRoleById()");
        return roleModel;
    }

    @Override
    public Stream<RoleModel> searchForRolesStream(RealmModel realmModel, String s, Integer integer, Integer integer1) {
        System.out.println("searchForRolesStream()");
        return roleModelStream;
    }

    @Override
    public RoleModel getClientRole(ClientModel clientModel, String s) {
        System.out.println("getClientRole()");
        return roleModel;
    }

    @Override
    public Stream<RoleModel> searchForClientRolesStream(ClientModel clientModel, String s, Integer integer, Integer integer1) {
        System.out.println("searchForClientRolesStream()");
        return roleModelStream;
    }
}

My CustomRoleProviderFactory:

public class CustomRoleProviderFactory implements RoleProviderFactory {
    @Override
    public RoleProvider create(KeycloakSession keycloakSession) {
        System.out.println("create");
        return new CustomRoleProvider();
    }

    @Override
    public void init(Config.Scope scope) {

    }

    @Override
    public void postInit(KeycloakSessionFactory keycloakSessionFactory) {

    }

    @Override
    public void close() {

    }

    @Override
    public String getId() {
        return "role-provider";
    }
}

I noticed that the create method was not called after the start of keycloak.

There is org.keycloak.models.RoleProviderFactory in resources\META-INF\services packages:

com.healthec.keycloak.provider.CustomRoleProviderFactory

Do you have any ideas why roles don't loaded?

Vlados
  • 151
  • 1
  • 4
  • 10

0 Answers0