gcube-cms-suite/geoportal-common/src/main/java/org/gcube/application/geoportal/common/model/useCaseDescriptor/DataAccessPolicy.java

82 lines
2.0 KiB
Java
Raw Normal View History

2022-03-04 14:23:20 +01:00
package org.gcube.application.geoportal.common.model.useCaseDescriptor;
2022-01-27 15:02:53 +01:00
2022-03-24 17:44:00 +01:00
import com.fasterxml.jackson.annotation.JsonIgnore;
2022-02-23 17:13:22 +01:00
import com.fasterxml.jackson.annotation.JsonProperty;
2022-01-27 15:02:53 +01:00
import lombok.*;
import org.bson.Document;
2022-03-24 17:44:00 +01:00
import org.gcube.application.geoportal.common.model.document.Project;
import org.gcube.application.geoportal.common.model.document.accounting.User;
2022-01-27 15:02:53 +01:00
import java.util.List;
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@ToString
public class DataAccessPolicy {
2022-02-23 17:13:22 +01:00
public static final String POLICY = "_policy";
public static final String ROLES = "_roles";
public static final String ENFORCER = "_enforcer";
2022-01-27 15:02:53 +01:00
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@ToString
public static class Policy {
2022-02-23 17:13:22 +01:00
public static final String WRITE="_write";
public static final String READ="_read";
2022-01-27 15:02:53 +01:00
public static enum Type{
OWN,NONE,ANY
}
2022-02-23 17:13:22 +01:00
@JsonProperty(WRITE)
2022-01-27 15:02:53 +01:00
private Type write;
2022-02-23 17:13:22 +01:00
@JsonProperty(READ)
2022-01-27 15:02:53 +01:00
private Type read;
}
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@ToString
public static class PolicyEnforcer {
2022-02-23 17:13:22 +01:00
public static final String FILTER="_filter";
@JsonProperty(FILTER)
2022-01-27 15:02:53 +01:00
private Document filter;
}
2022-02-23 17:13:22 +01:00
@JsonProperty(POLICY)
2022-01-27 15:02:53 +01:00
private Policy policy;
2022-02-23 17:13:22 +01:00
@JsonProperty(ROLES)
2022-01-27 15:02:53 +01:00
private List<String> roles;
2022-02-23 17:13:22 +01:00
@JsonProperty(ENFORCER)
2022-01-27 15:02:53 +01:00
private PolicyEnforcer enforcer;
2022-03-24 17:44:00 +01:00
@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;
}
}
2022-01-27 15:02:53 +01:00
}