Index: /home/dcervera/projects/svn/sourceforge/liferay/trunk/portal-impl/src/com/liferay/portal/events/ServicePreAction.java =================================================================== --- /home/dcervera/projects/svn/sourceforge/liferay/trunk/portal-impl/src/com/liferay/portal/events/ServicePreAction.java (revision 15101) +++ /home/dcervera/projects/svn/sourceforge/liferay/trunk/portal-impl/src/com/liferay/portal/events/ServicePreAction.java (working copy) @@ -599,6 +599,8 @@ guestGroup.getGroupId(), false, LayoutImpl.DEFAULT_PARENT_LAYOUT_ID); + guestLayouts = removeNotViewableAdditionalLayouts( + user, layout, layouts, req); layouts.addAll(0, guestLayouts); } else { @@ -638,6 +640,8 @@ previousGroupId.longValue(), false, LayoutImpl.DEFAULT_PARENT_LAYOUT_ID); + previousLayouts = removeNotViewableAdditionalLayouts( + user, layout, layouts, req); layouts.addAll(previousLayouts); } } @@ -644,6 +648,31 @@ return layouts; } + + /** + * Remove not viewable layouts from additional layouts. + */ + protected List removeNotViewableAdditionalLayouts(User user, + Layout layout, List layouts, HttpServletRequest req) + throws PortalException, SystemException { + + try { + + PermissionCheckerImpl permissionChecker = PermissionCheckerFactory.create( + user, true); + + Object[] viewableLayouts = getViewableLayouts(req, user, + permissionChecker, layout, layouts); + + return (List)viewableLayouts[1]; + } + catch (Exception e) { + + _log.error("Error with permissions on mergging additional layouts", e); + return layouts; + } + + } protected void rememberVisitedGroupIds( long currentGroupId, HttpServletRequest req) {