@Override public Set<RoleModel> getComposites() { Set<RoleModel> set = new HashSet<RoleModel>(); for (RoleEntity composite : getEntity().getCompositeRoles()) { set.add(new RoleAdapter(session, realm, em, composite)); // todo I want to do this, but can't as you get stack overflow // set.add(session.realms().getRoleById(composite.getId(), realm)); } return set; }
@Override public boolean hasRole(RoleModel role) { return this.equals(role) || KeycloakModelUtils.searchFor(role, this, new HashSet<>()); }
@Override public boolean isComposite() { return getComposites().size() > 0; }
@Override public void setAttribute(String name, Collection<String> values) { removeAttribute(name); for (String value : values) { persistAttributeValue(name, value); } }
@Override public void removeCompositeRole(RoleModel role) { RoleEntity entity = RoleAdapter.toRoleEntity(role, em); getEntity().getCompositeRoles().remove(entity); }
protected TypedQuery<ClientScopeRoleMappingEntity> getRealmScopeMappingQuery(RoleModel role) { TypedQuery<ClientScopeRoleMappingEntity> query = em.createNamedQuery("clientScopeHasRole", ClientScopeRoleMappingEntity.class); query.setParameter("clientScope", getEntity()); RoleEntity roleEntity = RoleAdapter.toRoleEntity(role, em); query.setParameter("role", roleEntity); return query; }
@Override public RoleModel getRoleById(String id, RealmModel realm) { RoleEntity entity = em.find(RoleEntity.class, id); if (entity == null) return null; if (!realm.getId().equals(entity.getRealmId())) return null; RoleAdapter adapter = new RoleAdapter(session, realm, em, entity); return adapter; }
@Override public int hashCode() { return getId().hashCode(); }
@Override public void setSingleAttribute(String name, String value) { setAttribute(name, Collections.singletonList(value)); }
public static RoleEntity toRoleEntity(RoleModel model, EntityManager em) { if (model instanceof RoleAdapter) { return ((RoleAdapter) model).getEntity(); } return em.getReference(RoleEntity.class, model.getId()); } }
@Override public String getContainerId() { if (isClientRole()) return role.getClient().getId(); else return realm.getId(); }
@Override public void addCompositeRole(RoleModel role) { RoleEntity entity = RoleAdapter.toRoleEntity(role, em); for (RoleEntity composite : getEntity().getCompositeRoles()) { if (composite.equals(entity)) return; } getEntity().getCompositeRoles().add(entity); }
@Override public void deleteScopeMapping(RoleModel role) { getEntity().getScopeMapping().remove(RoleAdapter.toRoleEntity(role, em)); }
@Override public RoleModel addRealmRole(RealmModel realm, String id, String name) { if (getRealmRole(realm, name) != null) { throw new ModelDuplicateException(); } RoleEntity entity = new RoleEntity(); entity.setId(id); entity.setName(name); RealmEntity ref = em.getReference(RealmEntity.class, realm.getId()); entity.setRealm(ref); entity.setRealmId(realm.getId()); em.persist(entity); em.flush(); RoleAdapter adapter = new RoleAdapter(session, realm, em, entity); return adapter; }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || !(o instanceof RoleModel)) return false; RoleModel that = (RoleModel) o; return that.getId().equals(getId()); }
@Override public void addScopeMapping(RoleModel role) { RoleEntity roleEntity = RoleAdapter.toRoleEntity(role, em); getEntity().getScopeMapping().add(roleEntity); }
@Override public RoleModel addClientRole(RealmModel realm, ClientModel client, String id, String name) { if (getClientRole(realm, client, name) != null) { throw new ModelDuplicateException(); } ClientEntity clientEntity = em.getReference(ClientEntity.class, client.getId()); RoleEntity roleEntity = new RoleEntity(); roleEntity.setId(id); roleEntity.setName(name); roleEntity.setClient(clientEntity); roleEntity.setClientRole(true); roleEntity.setRealmId(realm.getId()); em.persist(roleEntity); RoleAdapter adapter = new RoleAdapter(session, realm, em, roleEntity); return adapter; }
@Override public void addDefaultRole(String name) { RoleModel role = getRole(name); if (role == null) { role = addRole(name); } Collection<RoleEntity> entities = realm.getDefaultRoles(); for (RoleEntity entity : entities) { if (entity.getId().equals(role.getId())) { return; } } RoleEntity roleEntity = RoleAdapter.toRoleEntity(role, em); entities.add(roleEntity); em.flush(); }
@Override public void addDefaultRole(String name) { RoleModel role = getRole(name); if (role == null) { role = addRole(name); } Collection<RoleEntity> entities = entity.getDefaultRoles(); for (RoleEntity entity : entities) { if (entity.getId().equals(role.getId())) { return; } } RoleEntity roleEntity = RoleAdapter.toRoleEntity(role, em); entities.add(roleEntity); }
@Override public void addScopeMapping(RoleModel role) { if (hasScope(role)) return; ClientScopeRoleMappingEntity entity = new ClientScopeRoleMappingEntity(); entity.setClientScope(getEntity()); RoleEntity roleEntity = RoleAdapter.toRoleEntity(role, em); entity.setRole(roleEntity); em.persist(entity); em.flush(); em.detach(entity); }