FormsOnlineComponentAuthorization.java
package org.silverpeas.components.formsonline;
import org.silverpeas.components.formsonline.model.FormsOnlineException;
import org.silverpeas.components.formsonline.model.FormsOnlineService;
import org.silverpeas.core.security.authorization.AccessControlOperation;
import org.silverpeas.core.security.authorization.ComponentAccessControl;
import org.silverpeas.core.security.authorization.ComponentAuthorization;
import org.silverpeas.core.util.logging.SilverLogger;
import javax.inject.Named;
import java.util.Collection;
import java.util.Set;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Named
public class FormsOnlineComponentAuthorization implements ComponentAuthorization {
private FormsOnlineComponentAuthorization() {
// Instantiated by IoC only.
}
@Override
public boolean isRelatedTo(final String instanceId) {
return instanceId.startsWith("formsOnline");
}
@Override
public <T> Stream<T> filter(final Collection<T> resources,
final Function<T, ComponentResourceReference> converter, final String userId,
final AccessControlOperation... operations) {
Set<String> componentIds = resources.stream()
.map(r -> converter.apply(r).getInstanceId())
.collect(Collectors.toSet());
componentIds = ComponentAccessControl.get()
.filterAuthorizedByUser(componentIds, userId)
.collect(Collectors.toSet());
try {
String orderBy = "name asc";
final Set<String> formIds = FormsOnlineService.get()
.getAvailableFormsToSend(componentIds, userId, orderBy).stream()
.map(f -> String.valueOf(f.getId()))
.collect(Collectors.toSet());
return resources.stream().filter(r -> formIds.contains(converter.apply(r).getLocalId()));
} catch (FormsOnlineException e) {
SilverLogger.getLogger(this).error(e);
}
return Stream.empty();
}
}