/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.portal.rendering; import com.enonic.vertical.engine.handlers.MenuHandler; import com.enonic.cms.core.security.user.UserEntity; import com.enonic.cms.core.structure.RunAsType; import com.enonic.cms.core.structure.menuitem.MenuItemEntity; import com.enonic.cms.core.structure.portlet.PortletEntity; public class PortletRunAsUserResolver { public static UserEntity resolveRunAsUser( PortletEntity portlet, UserEntity currentUser, MenuItemEntity menuItem, MenuHandler menuHandler ) { if ( currentUser.isAnonymous() ) { // Anonymous user cannot run as any other user return currentUser; } RunAsType runAs = portlet.getRunAs(); if ( runAs.equals( RunAsType.PERSONALIZED ) ) { return currentUser; } else if ( runAs.equals( RunAsType.DEFAULT_USER ) ) { UserEntity defaultRunAsUser = menuHandler.getRunAsUserForSite( portlet.getSite().getKey() ); if ( defaultRunAsUser != null ) { return defaultRunAsUser; } return null; } else if ( runAs.equals( RunAsType.INHERIT ) ) { return inherit( currentUser, menuItem, menuHandler ); } else { throw new IllegalArgumentException( "Unsupported runAs: " + runAs ); } } private static UserEntity inherit( UserEntity current, MenuItemEntity menuItem, MenuHandler menuHandler ) { if ( menuItem != null ) { return menuItem.resolveRunAsUser( current, false, menuHandler ); } else { throw new IllegalStateException( "Expected to render portlet in context of either a menuitem or a page template" ); } } }