package org.mapfish.print.config.access;
import org.json.JSONObject;
import org.mapfish.print.config.ConfigurationObject;
/**
* An access assertion is a check that the current user has particular access/properties to allow access to a particular resource like
* a template or completed report.
* <p>
* All implementations must be serializable.
* </p>
*/
public interface AccessAssertion extends ConfigurationObject {
/**
* Checks that the user can access the resource.
* <p></p>
* Will throw {@link org.springframework.security.authentication.AuthenticationCredentialsNotFoundException} if the user has
* not logged in or supplied credentials.
* <p></p>
* Will throw {@link org.springframework.security.access.AccessDeniedException} if the user is logged in but may not access
* the resource.
*
* @param resourceDescription a string describing the resource for logging and exception throwing purposes
* @param protectedResource the resource being protected.
*/
void assertAccess(String resourceDescription, Object protectedResource);
/**
* Encode the assertion as JSON for later loading. Each call should return a unique JSON object.
*/
JSONObject marshal();
/**
* Load the assertion properties from the JSON data.
*
* @param encodedAssertion the assertion encoded as JSON.
*/
void unmarshal(JSONObject encodedAssertion);
/**
* Deep copy of this access assertion.
*
* @return the copy
*/
AccessAssertion copy();
}