001
014
015 package com.liferay.portal.service.permission;
016
017 import com.liferay.portal.NoSuchResourceException;
018 import com.liferay.portal.kernel.exception.PortalException;
019 import com.liferay.portal.kernel.exception.SystemException;
020 import com.liferay.portal.model.Group;
021 import com.liferay.portal.model.Layout;
022 import com.liferay.portal.model.LayoutConstants;
023 import com.liferay.portal.model.ResourceConstants;
024 import com.liferay.portal.security.auth.PrincipalException;
025 import com.liferay.portal.security.permission.ActionKeys;
026 import com.liferay.portal.security.permission.PermissionChecker;
027 import com.liferay.portal.service.GroupLocalServiceUtil;
028 import com.liferay.portal.service.LayoutLocalServiceUtil;
029 import com.liferay.portal.service.ResourceLocalServiceUtil;
030 import com.liferay.portal.service.ResourcePermissionLocalServiceUtil;
031 import com.liferay.portal.util.PropsValues;
032
033
037 public class LayoutPermissionImpl implements LayoutPermission {
038
039 public void check(
040 PermissionChecker permissionChecker, Layout layout, String actionId)
041 throws PortalException, SystemException {
042
043 if (!contains(permissionChecker, layout, actionId)) {
044 throw new PrincipalException();
045 }
046 }
047
048 public void check(
049 PermissionChecker permissionChecker, long groupId,
050 boolean privateLayout, long layoutId, String actionId)
051 throws PortalException, SystemException {
052
053 if (!contains(
054 permissionChecker, groupId, privateLayout, layoutId,
055 actionId)) {
056
057 throw new PrincipalException();
058 }
059 }
060
061 public void check(
062 PermissionChecker permissionChecker, long plid, String actionId)
063 throws PortalException, SystemException {
064
065 if (!contains(permissionChecker, plid, actionId)) {
066 throw new PrincipalException();
067 }
068 }
069
070 public boolean contains(
071 PermissionChecker permissionChecker, Layout layout, String actionId)
072 throws PortalException, SystemException {
073
074 if ((layout.isPrivateLayout() &&
075 !PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_MODIFIABLE) ||
076 (layout.isPublicLayout() &&
077 !PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_MODIFIABLE)) {
078
079 if (actionId.equals(ActionKeys.UPDATE)) {
080 Group group = GroupLocalServiceUtil.getGroup(
081 layout.getGroupId());
082
083 if (group.isUser()) {
084 return false;
085 }
086 }
087 }
088
089 if (GroupPermissionUtil.contains(
090 permissionChecker, layout.getGroupId(),
091 ActionKeys.MANAGE_LAYOUTS)) {
092
093 return true;
094 }
095
096 try {
097 if (PropsValues.PERMISSIONS_USER_CHECK_ALGORITHM == 6) {
098 if (ResourcePermissionLocalServiceUtil.
099 getResourcePermissionsCount(
100 layout.getCompanyId(), Layout.class.getName(),
101 ResourceConstants.SCOPE_INDIVIDUAL,
102 String.valueOf(layout.getPlid())) == 0) {
103
104 throw new NoSuchResourceException();
105 }
106 }
107 else {
108 ResourceLocalServiceUtil.getResource(
109 layout.getCompanyId(), Layout.class.getName(),
110 ResourceConstants.SCOPE_INDIVIDUAL,
111 String.valueOf(layout.getPlid()));
112 }
113 }
114 catch (NoSuchResourceException nsre) {
115 boolean addCommunityPermission = true;
116 boolean addGuestPermission = true;
117
118 if (layout.isPrivateLayout()) {
119 addGuestPermission = false;
120 }
121
122 ResourceLocalServiceUtil.addResources(
123 layout.getCompanyId(), layout.getGroupId(), 0,
124 Layout.class.getName(), layout.getPlid(), false,
125 addCommunityPermission, addGuestPermission);
126 }
127
128 return permissionChecker.hasPermission(
129 layout.getGroupId(), Layout.class.getName(), layout.getPlid(),
130 actionId);
131 }
132
133 public boolean contains(
134 PermissionChecker permissionChecker, long groupId,
135 boolean privateLayout, long layoutId, String actionId)
136 throws PortalException, SystemException {
137
138 if (layoutId == LayoutConstants.DEFAULT_PARENT_LAYOUT_ID) {
139 if (GroupPermissionUtil.contains(
140 permissionChecker, groupId, ActionKeys.MANAGE_LAYOUTS)) {
141
142 return true;
143 }
144 else {
145 return false;
146 }
147 }
148 else {
149 Layout layout = LayoutLocalServiceUtil.getLayout(
150 groupId, privateLayout, layoutId);
151
152 return contains(permissionChecker, layout, actionId);
153 }
154 }
155
156 public boolean contains(
157 PermissionChecker permissionChecker, long plid, String actionId)
158 throws PortalException, SystemException {
159
160 Layout layout = LayoutLocalServiceUtil.getLayout(plid);
161
162 return contains(permissionChecker, layout, actionId);
163 }
164
165 }