gcube-cms-suite/cms-plugin-framework/src/main/java/org/gcube/application/cms/plugins/implementations/RoleManager.java

65 lines
2.0 KiB
Java
Raw Normal View History

2022-03-29 18:06:09 +02:00
package org.gcube.application.cms.plugins.implementations;
import com.fasterxml.jackson.annotation.JsonProperty;
2022-10-05 16:17:34 +02:00
import lombok.*;
2022-03-29 18:06:09 +02:00
import lombok.extern.slf4j.Slf4j;
import org.gcube.application.cms.serialization.Serialization;
import org.gcube.application.geoportal.common.model.document.accounting.User;
import org.gcube.application.geoportal.common.model.rest.ConfigurationException;
import org.gcube.application.geoportal.common.model.useCaseDescriptor.HandlerDeclaration;
import javax.xml.bind.annotation.XmlRootElement;
import java.util.HashMap;
import java.util.List;
@Slf4j
2022-10-05 16:17:34 +02:00
@ToString
2022-03-29 18:06:09 +02:00
public class RoleManager {
HashMap<String,StepAccess> accessMap=new HashMap<>();
public RoleManager(HandlerDeclaration config) throws ConfigurationException {
2022-10-05 16:17:34 +02:00
log.debug("Instantiating for configuration {}",config);
2022-03-29 18:06:09 +02:00
List l =config.getConfiguration().get("step_access", List.class);
if(l==null|| l.isEmpty()) throw new ConfigurationException("Missing Role management in UCD");
for (Object o : l) {
StepAccess a= Serialization.convert(o, StepAccess.class);
accessMap.put(a.getStepId(),a);
}
2022-10-05 16:17:34 +02:00
log.debug("Access Map is {}",accessMap);
2022-03-29 18:06:09 +02:00
}
public boolean canInvokeStep(String stepID,User u) throws ConfigurationException {
if(!accessMap.containsKey(stepID)) throw new ConfigurationException("Missing step "+stepID+" access definition");
2022-04-08 13:17:52 +02:00
List<String> roles=accessMap.get(stepID).getRoles();
if(roles.isEmpty()) return true;
for (String role : roles)
2022-03-29 18:06:09 +02:00
if (u.getRoles().contains(role))
return true;
return false;
}
@XmlRootElement
2022-10-05 16:17:34 +02:00
@NoArgsConstructor
2022-03-29 18:06:09 +02:00
@AllArgsConstructor
@Getter
@Setter
@ToString(callSuper = true)
public static class StepAccess {
public static final String STEP="STEP";
public static final String ROLES="roles";
@JsonProperty(STEP)
private String stepId;
@JsonProperty(ROLES)
private List<String> roles;
}
}