001
014
015 package com.liferay.portlet;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.util.StringPool;
019 import com.liferay.portal.model.Group;
020 import com.liferay.portal.model.LayoutConstants;
021 import com.liferay.portal.model.Portlet;
022 import com.liferay.portal.security.permission.ActionKeys;
023 import com.liferay.portal.security.permission.PermissionChecker;
024 import com.liferay.portal.security.permission.ResourceActionsUtil;
025 import com.liferay.portal.service.permission.PortletPermissionUtil;
026 import com.liferay.portal.theme.ThemeDisplay;
027 import com.liferay.portal.util.PortletCategoryKeys;
028
029 import java.util.List;
030
031
034 public abstract class BaseControlPanelEntry implements ControlPanelEntry {
035
036 @Override
037 public boolean hasAccessPermission(
038 PermissionChecker permissionChecker, Group group, Portlet portlet)
039 throws Exception {
040
041 if (hasAccessPermissionDenied(permissionChecker, group, portlet)) {
042 return false;
043 }
044
045 if (hasAccessPermissionExplicitlyGranted(
046 permissionChecker, group, portlet)) {
047
048 return true;
049 }
050
051 return hasPermissionImplicitlyGranted(
052 permissionChecker, group, portlet);
053 }
054
055
066 @Deprecated
067 @Override
068 public boolean isVisible(
069 PermissionChecker permissionChecker, Portlet portlet)
070 throws Exception {
071
072 return false;
073 }
074
075
086 @Deprecated
087 @Override
088 public boolean isVisible(
089 Portlet portlet, String category, ThemeDisplay themeDisplay)
090 throws Exception {
091
092 return false;
093 }
094
095 protected long getDefaultPlid(Group group, String category) {
096 long plid = LayoutConstants.DEFAULT_PLID;
097
098 if (category.startsWith(PortletCategoryKeys.SITE_ADMINISTRATION)) {
099 plid = group.getDefaultPublicPlid();
100
101 if (plid == LayoutConstants.DEFAULT_PLID) {
102 plid = group.getDefaultPrivatePlid();
103 }
104 }
105
106 return plid;
107 }
108
109 protected boolean hasAccessPermissionDenied(
110 PermissionChecker permissionChecker, Group group, Portlet portlet)
111 throws Exception {
112
113 String category = portlet.getControlPanelEntryCategory();
114
115 if (category.equals(PortletCategoryKeys.SITE_ADMINISTRATION_CONTENT) &&
116 group.isLayout() && !portlet.isScopeable()) {
117
118 return true;
119 }
120
121 return false;
122 }
123
124 protected boolean hasAccessPermissionExplicitlyGranted(
125 PermissionChecker permissionChecker, Group group, Portlet portlet)
126 throws PortalException {
127
128 if (permissionChecker.isCompanyAdmin()) {
129 return true;
130 }
131
132 String category = portlet.getControlPanelEntryCategory();
133
134 if (category == null) {
135 category = StringPool.BLANK;
136 }
137
138 if (category.startsWith(PortletCategoryKeys.SITE_ADMINISTRATION)) {
139 if (permissionChecker.isGroupAdmin(group.getGroupId()) &&
140 !group.isUser()) {
141
142 return true;
143 }
144 }
145
146 long groupId = group.getGroupId();
147
148 if (category.equals(PortletCategoryKeys.APPS) ||
149 category.equals(PortletCategoryKeys.CONFIGURATION) ||
150 category.equals(PortletCategoryKeys.SITES) ||
151 category.equals(PortletCategoryKeys.USERS)) {
152
153 groupId = 0;
154 }
155
156 List<String> actions = ResourceActionsUtil.getResourceActions(
157 portlet.getPortletId());
158
159 if (actions.contains(ActionKeys.ACCESS_IN_CONTROL_PANEL) &&
160 PortletPermissionUtil.contains(
161 permissionChecker, groupId, 0, portlet.getRootPortletId(),
162 ActionKeys.ACCESS_IN_CONTROL_PANEL, true)) {
163
164 return true;
165 }
166
167 return false;
168 }
169
170 protected boolean hasPermissionImplicitlyGranted(
171 PermissionChecker permissionChecker, Group group, Portlet portlet)
172 throws Exception {
173
174 return false;
175 }
176
177 }