@Override public void clearDynMembers(final Role role) { Query delete = entityManager().createNativeQuery("DELETE FROM " + DYNMEMB_TABLE + " WHERE role_id=?"); delete.setParameter(1, role.getKey()); delete.executeUpdate(); }
@Override @SuppressWarnings("unchecked") public List<String> findDynMembers(final Role role) { if (role.getDynMembership() == null) { return Collections.emptyList(); } Query query = entityManager().createNativeQuery("SELECT any_id FROM " + DYNMEMB_TABLE + " WHERE role_id=?"); query.setParameter(1, role.getKey()); List<String> result = new ArrayList<>(); query.getResultList().stream().map(key -> key instanceof Object[] ? (String) ((Object[]) key)[0] : ((String) key)). forEach(user -> result.add((String) user)); return result; }
@Override public boolean isValid(final Role role, final ConstraintValidatorContext context) { context.disableDefaultConstraintViolation(); if (role.getKey() == null || !KEY_PATTERN.matcher(role.getKey()).matches()) { context.buildConstraintViolationWithTemplate( getTemplate(EntityViolationType.InvalidKey, "Invalid role key")). addPropertyNode("key").addConstraintViolation(); return false; } return true; } }
filter(role -> role.getDynMembership() != null && searchDAO.matches(user, SearchCondConverter.convert(role.getDynMembership().getFIQLCond())) && !before.contains(role.getKey())). forEach(role -> { Query insert = entityManager().createNativeQuery("INSERT INTO " + DYNMEMB_TABLE + " VALUES(?, ?)"); insert.setParameter(1, user.getKey()); insert.setParameter(2, role.getKey()); insert.executeUpdate(); after.add(role.getKey()); });
@Override public RoleTO getRoleTO(final Role role) { RoleTO roleTO = new RoleTO(); roleTO.setKey(role.getKey()); roleTO.getEntitlements().addAll(role.getEntitlements()); roleTO.getRealms().addAll(role.getRealms().stream(). map(Realm::getFullPath).collect(Collectors.toList())); roleTO.getDynRealms().addAll(role.getDynRealms().stream(). map(Entity::getKey).collect(Collectors.toList())); if (role.getDynMembership() != null) { roleTO.setDynMembershipCond(role.getDynMembership().getFIQLCond()); } roleTO.getPrivileges().addAll(role.getPrivileges().stream(). map(Entity::getKey).collect(Collectors.toList())); return roleTO; } }
@Override public Role saveAndRefreshDynMemberships(final Role role) { Role merged = save(role); // refresh dynamic memberships clearDynMembers(merged); if (merged.getDynMembership() != null) { List<User> matching = searchDAO.search( SearchCondConverter.convert(merged.getDynMembership().getFIQLCond()), AnyTypeKind.USER); matching.forEach((user) -> { Query insert = entityManager().createNativeQuery("INSERT INTO " + DYNMEMB_TABLE + " VALUES(?, ?)"); insert.setParameter(1, user.getKey()); insert.setParameter(2, merged.getKey()); insert.executeUpdate(); publisher.publishEvent(new AnyCreatedUpdatedEvent<>(this, user, AuthContextUtils.getDomain())); }); } return merged; }
if (role.getKey() == null && roleTO.getDynMembershipCond() != null) { setDynMembership(role, roleTO.getDynMembershipCond()); } else if (role.getDynMembership() != null && roleTO.getDynMembershipCond() == null) {