All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.geoserver.security.DataAccessManager Maven / Gradle / Ivy

The newest version!
/* Copyright (c) 2001 - 2007 TOPP - www.openplans.org. All rights reserved.
 * This code is licensed under the GPL 2.0 license, available at the root
 * application directory.
 */
package org.geoserver.security;

import org.acegisecurity.AcegiSecurityException;
import org.acegisecurity.Authentication;
import org.geoserver.catalog.LayerInfo;
import org.geoserver.catalog.ResourceInfo;
import org.geoserver.catalog.WorkspaceInfo;

/**
 * Data access manager provides the {@link SecureCatalogImpl} with directives on
 * what the specified user can access.
 * @author Andrea Aime - TOPP
 *
 */
public interface DataAccessManager {
    
    /**
     * The security mode in which the catalog should be operating
     * @author Administrator
     *
     */
    public enum CatalogMode {
        /**
         * If the user does not have enough authorities, just pretend the layers that cannot be
         * read are not there, and those that cannot be written are read only (never ask for
         * authentication, which should be performed prior to data access)
         */
        HIDE,
        /**
         * Always list of all the layers and allow access to each layer metadata.
         * If a user tries to access the data and she cannot read, or to write data and
         * she cannot write, challenge her with an authentication request. 
         * This mode does not hide the existence of layers, and
         * should work fine with most applications requiring authentication. 
         */
        CHALLENGE,
        /**
         * A mixed approach. The methods that do list the contents of the catalog do not
         * report the layers the current user cannot access to, but trying to access the
         * layer directly generates an {@link AcegiSecurityException} that will challenge
         * the user for authentication. This approach assumes the capabilities requests
         * are using the listing methods, whilst any access by name is performed using
         * the direct access methods. This is reasonable, but cannot be guaranteed, so
         * this approach is bound to be more fragile than the other two, given it's
         * based on a programming convention that cannot be enforced.
         */
        MIXED
    }
    
    /**
     * Returns the security mode in which the secure catalog must operate
     * @return
     */
    public CatalogMode getMode();

    /**
     * Returns true if user can access the workspace in the specified mode
     */
    public boolean canAccess(Authentication user, WorkspaceInfo workspace, AccessMode mode);
    
    /**
     * Returns true if user can access the layer in the specified mode
     */
    public boolean canAccess(Authentication user, LayerInfo layer, AccessMode mode);
    
    /**
     * Returns true if user can access the resource in the specified mode
     */
    public boolean canAccess(Authentication user, ResourceInfo resource, AccessMode mode);
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy