package org.geoserver.security;
import java.util.HashMap;
import java.util.Map;
import org.geoserver.catalog.CatalogInfo;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.ResourceInfo;
import org.geoserver.catalog.WorkspaceInfo;
import org.springframework.security.core.Authentication;
/**
* A simple {@link ResourceAccessManager} that keeps all the limits in a in memory hash map.
* Useful for testing purposes
*
* @author Andrea Aime - GeoSolutions
*/
public class TestResourceAccessManager implements ResourceAccessManager {
Map<String, Map<String, AccessLimits>> limits = new HashMap<String, Map<String,AccessLimits>>();
public WorkspaceAccessLimits getAccessLimits(Authentication user, WorkspaceInfo workspace) {
if(user == null) {
return null;
}
final String name = user.getName();
return (WorkspaceAccessLimits) getUserMap(name).get(workspace.getId());
}
public DataAccessLimits getAccessLimits(Authentication user, LayerInfo layer) {
if(user == null) {
return null;
}
final String name = user.getName();
DataAccessLimits limits = (DataAccessLimits) getUserMap(name).get(layer.getId());
if(limits == null) {
limits = getAccessLimits(user, layer.getResource());
}
return limits;
}
public DataAccessLimits getAccessLimits(Authentication user, ResourceInfo resource) {
if(user == null) {
return null;
}
final String name = user.getName();
return (DataAccessLimits) getUserMap(name).get(resource.getId());
}
/**
* Saves the mock access limits for this user and secured item (this is meant only for testing,
* it's the caller care to make sure the appropriate user limits class is used).
* The CatalogInfo is required to have a valid and stable id.
* @param userName
* @param securedItem
* @param limits
*/
public void putLimits(String userName, CatalogInfo securedItem, AccessLimits limits) {
getUserMap(userName).put(securedItem.getId(), limits);
}
Map<String, AccessLimits> getUserMap(String userName) {
Map<String, AccessLimits> userMap = limits.get(userName);
if(userMap == null) {
userMap = new HashMap<String, AccessLimits>();
limits.put(userName, userMap);
}
return userMap;
}
}