package org.gcube.application.geoportal.common.model.useCaseDescriptor; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.*; import org.bson.Document; import org.gcube.application.geoportal.common.model.document.Project; import org.gcube.application.geoportal.common.model.document.accounting.User; import java.util.List; @NoArgsConstructor @AllArgsConstructor @Getter @Setter @ToString public class DataAccessPolicy { public static final String POLICY = "_policy"; public static final String ROLES = "_roles"; public static final String ENFORCER = "_enforcer"; @NoArgsConstructor @AllArgsConstructor @Getter @Setter @ToString public static class Policy { public static final String WRITE="_write"; public static final String READ="_read"; public static enum Type{ OWN,NONE,ANY } @JsonProperty(WRITE) private Type write; @JsonProperty(READ) private Type read; } @NoArgsConstructor @AllArgsConstructor @Getter @Setter @ToString public static class PolicyEnforcer { public static final String FILTER="_filter"; @JsonProperty(FILTER) private Document filter; } @JsonProperty(POLICY) private Policy policy; @JsonProperty(ROLES) private List roles; @JsonProperty(ENFORCER) private PolicyEnforcer enforcer; @JsonIgnore public boolean canRead(Project p, User u){ switch(getPolicy().getRead()){ case OWN: return p.getInfo().getCreationInfo().getUser().equals(u); case ANY: return true; case NONE: default : return false; } } @JsonIgnore public boolean canWrite(Project p, User u){ switch(getPolicy().getWrite()){ case OWN: return p.getInfo().getCreationInfo().getUser().equals(u); case ANY: return true; case NONE: default : return false; } } }