2 * Copyright (c) 2000-2012 Liferay, Inc. All rights reserved.
\r
4 * This library is free software; you can redistribute it and/or modify it under
\r
5 * the terms of the GNU Lesser General Public License as published by the Free
\r
6 * Software Foundation; either version 2.1 of the License, or (at your option)
\r
9 * This library is distributed in the hope that it will be useful, but WITHOUT
\r
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
\r
11 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
\r
15 package com.liferay.portal.service.permission;
\r
17 import com.liferay.portal.kernel.exception.PortalException;
\r
18 import com.liferay.portal.kernel.exception.SystemException;
\r
19 import com.liferay.portal.kernel.log.Log;
\r
20 import com.liferay.portal.kernel.log.LogFactoryUtil;
\r
21 import com.liferay.portal.kernel.staging.permission.StagingPermissionUtil;
\r
22 import com.liferay.portal.kernel.util.Validator;
\r
23 import com.liferay.portal.model.Group;
\r
24 import com.liferay.portal.model.Layout;
\r
25 import com.liferay.portal.model.LayoutTypePortlet;
\r
26 import com.liferay.portal.model.Portlet;
\r
27 import com.liferay.portal.model.PortletConstants;
\r
28 import com.liferay.portal.model.impl.VirtualLayout;
\r
29 import com.liferay.portal.security.auth.PrincipalException;
\r
30 import com.liferay.portal.security.permission.ActionKeys;
\r
31 import com.liferay.portal.security.permission.PermissionChecker;
\r
32 import com.liferay.portal.security.permission.ResourceActionsUtil;
\r
33 import com.liferay.portal.service.LayoutLocalServiceUtil;
\r
34 import com.liferay.portal.service.PortletLocalServiceUtil;
\r
35 import com.liferay.portal.util.PortletCategoryKeys;
\r
36 import com.liferay.portal.util.PropsValues;
\r
37 import com.liferay.portlet.sites.util.SitesUtil;
\r
39 import java.util.Collection;
\r
40 import java.util.List;
\r
42 import javax.portlet.PortletMode;
\r
45 * @author Brian Wing Shun Chan
\r
46 * @author Raymond Augé
\r
48 public class PortletPermissionImpl implements PortletPermission {
\r
50 public static final boolean DEFAULT_STRICT = false;
\r
53 PermissionChecker permissionChecker, Layout layout,
\r
54 String portletId, String actionId)
\r
55 throws PortalException, SystemException {
\r
58 permissionChecker, 0, layout, portletId, actionId,
\r
61 throw new PrincipalException();
\r
66 PermissionChecker permissionChecker, Layout layout,
\r
67 String portletId, String actionId, boolean strict)
\r
68 throws PortalException, SystemException {
\r
71 permissionChecker, 0, layout, portletId, actionId, strict)) {
\r
73 throw new PrincipalException();
\r
78 PermissionChecker permissionChecker, long groupId, Layout layout,
\r
79 String portletId, String actionId)
\r
80 throws PortalException, SystemException {
\r
83 permissionChecker, groupId, layout, portletId, actionId,
\r
86 throw new PrincipalException();
\r
91 PermissionChecker permissionChecker, long groupId, Layout layout,
\r
92 String portletId, String actionId, boolean strict)
\r
93 throws PortalException, SystemException {
\r
96 permissionChecker, groupId, layout, portletId, actionId,
\r
99 throw new PrincipalException();
\r
104 PermissionChecker permissionChecker, long groupId, long plid,
\r
105 String portletId, String actionId)
\r
106 throws PortalException, SystemException {
\r
109 permissionChecker, groupId, plid, portletId, actionId,
\r
114 PermissionChecker permissionChecker, long groupId, long plid,
\r
115 String portletId, String actionId, boolean strict)
\r
116 throws PortalException, SystemException {
\r
119 permissionChecker, groupId, plid, portletId, actionId,
\r
122 throw new PrincipalException();
\r
127 PermissionChecker permissionChecker, long plid, String portletId,
\r
129 throws PortalException, SystemException {
\r
131 check(permissionChecker, plid, portletId, actionId, DEFAULT_STRICT);
\r
135 PermissionChecker permissionChecker, long plid, String portletId,
\r
136 String actionId, boolean strict)
\r
137 throws PortalException, SystemException {
\r
139 if (!contains(permissionChecker, plid, portletId, actionId, strict)) {
\r
140 throw new PrincipalException();
\r
145 PermissionChecker permissionChecker, String portletId,
\r
147 throws PortalException, SystemException {
\r
149 if (!contains(permissionChecker, portletId, actionId)) {
\r
150 throw new PrincipalException();
\r
154 public boolean contains(
\r
155 PermissionChecker permissionChecker, Layout layout, Portlet portlet,
\r
157 throws PortalException, SystemException {
\r
160 permissionChecker, layout, portlet, actionId, DEFAULT_STRICT);
\r
163 public boolean contains(
\r
164 PermissionChecker permissionChecker, Layout layout, Portlet portlet,
\r
165 String actionId, boolean strict)
\r
166 throws PortalException, SystemException {
\r
169 permissionChecker, 0, layout, portlet, actionId, strict);
\r
172 public boolean contains(
\r
173 PermissionChecker permissionChecker, Layout layout,
\r
174 String portletId, String actionId)
\r
175 throws PortalException, SystemException {
\r
178 permissionChecker, layout, portletId, actionId, DEFAULT_STRICT);
\r
181 public boolean contains(
\r
182 PermissionChecker permissionChecker, Layout layout,
\r
183 String portletId, String actionId, boolean strict)
\r
184 throws PortalException, SystemException {
\r
187 permissionChecker, 0, layout, portletId, actionId, strict);
\r
190 public boolean contains(
\r
191 PermissionChecker permissionChecker, long groupId, Layout layout,
\r
192 Portlet portlet, String actionId)
\r
193 throws PortalException, SystemException {
\r
196 permissionChecker, groupId, layout, portlet, actionId,
\r
200 public boolean contains(
\r
201 PermissionChecker permissionChecker, long groupId, Layout layout,
\r
202 Portlet portlet, String actionId, boolean strict)
\r
203 throws PortalException, SystemException {
\r
205 if (portlet.isUndeployedPortlet()) {
\r
209 if (portlet.isSystem() && actionId.equals(ActionKeys.VIEW)) {
\r
214 permissionChecker, groupId, layout, portlet.getPortletId(),
\r
218 public boolean contains(
\r
219 PermissionChecker permissionChecker, long groupId, Layout layout,
\r
220 String portletId, String actionId)
\r
221 throws PortalException, SystemException {
\r
224 permissionChecker, groupId, layout, portletId, actionId,
\r
228 public boolean contains(
\r
229 PermissionChecker permissionChecker, long groupId, Layout layout,
\r
230 String portletId, String actionId, boolean strict)
\r
231 throws PortalException, SystemException {
\r
233 String name = null;
\r
234 String primKey = null;
\r
236 if (layout == null) {
\r
238 primKey = portletId;
\r
240 return permissionChecker.hasPermission(
\r
241 groupId, name, primKey, actionId);
\r
244 Group group = layout.getGroup();
\r
246 groupId = group.getGroupId();
\r
248 name = PortletConstants.getRootPortletId(portletId);
\r
249 primKey = getPrimaryKey(layout.getPlid(), portletId);
\r
251 if (!actionId.equals(ActionKeys.VIEW) &&
\r
252 (layout instanceof VirtualLayout)) {
\r
254 return hasCustomizePermission(
\r
255 permissionChecker, layout, portletId, actionId);
\r
258 if (!group.isLayoutSetPrototype() &&
\r
259 !SitesUtil.isLayoutUpdateable(layout) &&
\r
260 actionId.equals(ActionKeys.CONFIGURATION)) {
\r
265 Boolean hasPermission = StagingPermissionUtil.hasPermission(
\r
266 permissionChecker, groupId, name, groupId, name, actionId);
\r
268 if (hasPermission != null) {
\r
269 return hasPermission.booleanValue();
\r
272 if (actionId.equals(ActionKeys.VIEW) && group.isControlPanel()) {
\r
277 return permissionChecker.hasPermission(
\r
278 groupId, name, primKey, actionId);
\r
281 if (hasConfigurePermission(
\r
282 permissionChecker, layout, portletId, actionId) ||
\r
283 hasCustomizePermission(
\r
284 permissionChecker, layout, portletId, actionId)) {
\r
289 // System.out.println("groupId " + groupId);
\r
290 // System.out.println("name " + name);
\r
291 // System.out.println("primKey " + primKey);
\r
292 // System.out.println("actionId " + actionId);
\r
293 // System.out.println("permissionChecker.hasPermission(groupId, name, primKey, actionId) " + permissionChecker.hasPermission(
\r
294 // groupId, name, primKey, actionId));
\r
296 return permissionChecker.hasPermission(
\r
297 groupId, name, primKey, actionId);
\r
300 public boolean contains(
\r
301 PermissionChecker permissionChecker, long groupId, long plid,
\r
302 Collection<Portlet> portlets, String actionId) {
\r
304 for (Portlet portlet : portlets) {
\r
305 if (permissionChecker.hasPermission(
\r
306 groupId, portlet.getPortletId(), portlet.getPortletId(),
\r
307 ActionKeys.ACCESS_IN_CONTROL_PANEL)) {
\r
316 public boolean contains(
\r
317 PermissionChecker permissionChecker, long groupId, long plid,
\r
318 Portlet portlet, String actionId)
\r
319 throws PortalException, SystemException {
\r
321 Layout layout = LayoutLocalServiceUtil.fetchLayout(plid);
\r
324 permissionChecker, groupId, layout, portlet, actionId,
\r
328 public boolean contains(
\r
329 PermissionChecker permissionChecker, long groupId, long plid,
\r
330 Portlet portlet, String actionId, boolean strict)
\r
331 throws PortalException, SystemException {
\r
333 Layout layout = LayoutLocalServiceUtil.fetchLayout(plid);
\r
336 permissionChecker, groupId, layout, portlet, actionId, strict);
\r
339 public boolean contains(
\r
340 PermissionChecker permissionChecker, long groupId, long plid,
\r
341 String portletId, String actionId)
\r
342 throws PortalException, SystemException {
\r
344 Layout layout = LayoutLocalServiceUtil.fetchLayout(plid);
\r
347 permissionChecker, groupId, layout, portletId, actionId,
\r
351 public boolean contains(
\r
352 PermissionChecker permissionChecker, long groupId, long plid,
\r
353 String portletId, String actionId, boolean strict)
\r
354 throws PortalException, SystemException {
\r
356 Layout layout = LayoutLocalServiceUtil.fetchLayout(plid);
\r
359 permissionChecker, groupId, layout, portletId, actionId, strict);
\r
362 public boolean contains(
\r
363 PermissionChecker permissionChecker, long plid, Portlet portlet,
\r
365 throws PortalException, SystemException {
\r
367 Layout layout = LayoutLocalServiceUtil.fetchLayout(plid);
\r
370 permissionChecker, layout, portlet, actionId, DEFAULT_STRICT);
\r
373 public boolean contains(
\r
374 PermissionChecker permissionChecker, long plid, Portlet portlet,
\r
375 String actionId, boolean strict)
\r
376 throws PortalException, SystemException {
\r
378 Layout layout = LayoutLocalServiceUtil.fetchLayout(plid);
\r
381 permissionChecker, 0, layout, portlet, actionId, strict);
\r
384 public boolean contains(
\r
385 PermissionChecker permissionChecker, long plid, String portletId,
\r
387 throws PortalException, SystemException {
\r
389 Layout layout = LayoutLocalServiceUtil.fetchLayout(plid);
\r
392 permissionChecker, layout, portletId, actionId, DEFAULT_STRICT);
\r
395 public boolean contains(
\r
396 PermissionChecker permissionChecker, long plid, String portletId,
\r
397 String actionId, boolean strict)
\r
398 throws PortalException, SystemException {
\r
400 Layout layout = LayoutLocalServiceUtil.fetchLayout(plid);
\r
403 permissionChecker, 0, layout, portletId, actionId, strict);
\r
406 public boolean contains(
\r
407 PermissionChecker permissionChecker, String portletId,
\r
409 throws PortalException, SystemException {
\r
411 return contains(permissionChecker, 0, portletId, actionId);
\r
414 public String getPrimaryKey(long plid, String portletId) {
\r
415 return String.valueOf(plid).concat(
\r
416 PortletConstants.LAYOUT_SEPARATOR).concat(portletId);
\r
419 public boolean hasAccessPermission(
\r
420 PermissionChecker permissionChecker, long scopeGroupId,
\r
421 Layout layout, Portlet portlet, PortletMode portletMode)
\r
422 throws PortalException, SystemException {
\r
424 if ((layout != null) && layout.isTypeControlPanel()) {
\r
425 String category = portlet.getControlPanelEntryCategory();
\r
427 if (Validator.equals(category, PortletCategoryKeys.CONTENT)) {
\r
432 boolean access = contains(
\r
433 permissionChecker, scopeGroupId, layout, portlet, ActionKeys.VIEW);
\r
435 if (access && !PropsValues.TCK_URL &&
\r
436 portletMode.equals(PortletMode.EDIT)) {
\r
439 permissionChecker, scopeGroupId, layout, portlet,
\r
440 ActionKeys.PREFERENCES);
\r
446 public boolean hasLayoutManagerPermission(
\r
447 String portletId, String actionId) {
\r
450 portletId = PortletConstants.getRootPortletId(portletId);
\r
452 List<String> layoutManagerActions =
\r
453 ResourceActionsUtil.getPortletResourceLayoutManagerActions(
\r
456 return layoutManagerActions.contains(actionId);
\r
458 catch (Exception e) {
\r
465 protected boolean hasConfigurePermission(
\r
466 PermissionChecker permissionChecker, Layout layout,
\r
467 String portletId, String actionId)
\r
468 throws PortalException, SystemException {
\r
470 if (!actionId.equals(ActionKeys.CONFIGURATION) &&
\r
471 !actionId.equals(ActionKeys.PREFERENCES) &&
\r
472 !actionId.equals(ActionKeys.GUEST_PREFERENCES)) {
\r
477 Portlet portlet = PortletLocalServiceUtil.getPortletById(
\r
478 layout.getCompanyId(), portletId);
\r
480 if (portlet.isPreferencesUniquePerLayout()) {
\r
481 return LayoutPermissionUtil.contains(
\r
482 permissionChecker, layout, ActionKeys.CONFIGURE_PORTLETS);
\r
485 return GroupPermissionUtil.contains(
\r
486 permissionChecker, layout.getGroupId(),
\r
487 ActionKeys.CONFIGURE_PORTLETS);
\r
490 protected boolean hasCustomizePermission(
\r
491 PermissionChecker permissionChecker, Layout layout,
\r
492 String portletId, String actionId)
\r
493 throws PortalException, SystemException {
\r
495 LayoutTypePortlet layoutTypePortlet =
\r
496 (LayoutTypePortlet)layout.getLayoutType();
\r
498 if (layoutTypePortlet.isCustomizedView() &&
\r
499 layoutTypePortlet.isPortletCustomizable(portletId) &&
\r
500 LayoutPermissionUtil.contains(
\r
501 permissionChecker, layout, ActionKeys.CUSTOMIZE)) {
\r
503 if (actionId.equals(ActionKeys.VIEW)) {
\r
506 else if (actionId.equals(ActionKeys.CONFIGURATION)) {
\r
507 Portlet portlet = PortletLocalServiceUtil.getPortletById(
\r
508 layout.getCompanyId(), portletId);
\r
510 if (portlet.isPreferencesUniquePerLayout()) {
\r
519 private static Log _log = LogFactoryUtil.getLog(
\r
520 PortletPermissionImpl.class);
\r