Package org.pentaho.platform.repository2.unified.jcr

Source Code of org.pentaho.platform.repository2.unified.jcr.SharedObjectsDefaultAclHandler

/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2002-2013 Pentaho Corporation..  All rights reserved.
*/

package org.pentaho.platform.repository2.unified.jcr;

/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright 2013 Pentaho Corporation.  All rights reserved.
*
* User: pminutillo
* Date: 2/12/13
* Time: 4:10 PM
*/

import org.pentaho.platform.api.mt.ITenant;
import org.pentaho.platform.api.repository2.unified.RepositoryFile;
import org.pentaho.platform.api.repository2.unified.RepositoryFileAcl;
import org.pentaho.platform.api.repository2.unified.RepositoryFilePermission;
import org.pentaho.platform.api.repository2.unified.RepositoryFileSid;
import org.pentaho.platform.api.repository2.unified.RepositoryFileSid.Type;
import org.pentaho.platform.engine.core.system.PentahoSessionHolder;

import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.EnumSet;
import java.util.List;

/**
* This default acl handler sets the default security to Authenticated ALL for specific shared paths specified by a
* list in the configuration, defaulting to just databases at this time.
*
* @author Will Gorman (wgorman@pentaho.com)
*/
public class SharedObjectsDefaultAclHandler extends InheritDefaultAclHandler {

  String authenticatedRoleName = "Authenticated";
  List<String> sharedObjectPaths; // "{0}/etc/pdi/databases"

  public SharedObjectsDefaultAclHandler() {
    sharedObjectPaths = new ArrayList<String>();
    sharedObjectPaths.add( "{0}/etc/pdi/databases" );
  }

  public SharedObjectsDefaultAclHandler( String authenticatedRoleName, List<String> sharedObjectPaths ) {
    this.authenticatedRoleName = authenticatedRoleName;
    this.sharedObjectPaths = sharedObjectPaths;
  }

  /**
   * Logic to determine if we should use default Authenticated permission vs. Inheriting permission. This is the
   * approach we take with Shared Objects in the DI Server.
   *
   * @param file
   *          repository file to examine
   * @return whether this file is in a shared object path
   *
   */
  protected boolean applyAuthRule( RepositoryFile file ) {
    ITenant tenant = JcrTenantUtils.getTenant();
    for ( String path : sharedObjectPaths ) {
      String substitutedPath = MessageFormat.format( path, tenant.getRootFolderAbsolutePath() );
      if ( file.getPath() != null && file.getPath().startsWith( substitutedPath ) ) {
        return true;
      }
    }
    return false;
  }

  /**
   * Determine the correct default acls and return it.
   *
   * @return default acls
   */
  @Override
  public RepositoryFileAcl createDefaultAcl( RepositoryFile repositoryFile ) {
    if ( applyAuthRule( repositoryFile ) ) {
      // if the auth name is not specified in the config, create an acl without an ace
      if ( authenticatedRoleName == null || authenticatedRoleName.trim().length() == 0 ) {
        return new RepositoryFileAcl.Builder( PentahoSessionHolder.getSession().getName() ).entriesInheriting( false )
            .build();
      } else {
        // if an auth is defined, create an acl with the ace
        RepositoryFileSid tenantAuthenticatedRoleSid = new RepositoryFileSid( authenticatedRoleName, Type.ROLE );
        return new RepositoryFileAcl.Builder( PentahoSessionHolder.getSession().getName() ).entriesInheriting( false )
            .ace( tenantAuthenticatedRoleSid, EnumSet.of( RepositoryFilePermission.ALL ) ).build();
      }
    } else {
      return super.createDefaultAcl( repositoryFile );
    }
  }
}
TOP

Related Classes of org.pentaho.platform.repository2.unified.jcr.SharedObjectsDefaultAclHandler

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.