001
014
015 package com.liferay.portal.upgrade.v6_1_0;
016
017 import com.liferay.portal.kernel.dao.jdbc.DataAccess;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.log.Log;
020 import com.liferay.portal.kernel.log.LogFactoryUtil;
021 import com.liferay.portal.kernel.upgrade.UpgradeProcess;
022 import com.liferay.portal.kernel.util.GetterUtil;
023 import com.liferay.portal.kernel.util.StringBundler;
024 import com.liferay.portal.model.PermissionedModel;
025 import com.liferay.portal.model.ResourceBlock;
026 import com.liferay.portal.model.ResourceBlockPermissionsContainer;
027 import com.liferay.portal.model.ResourceConstants;
028 import com.liferay.portal.model.ResourcePermission;
029 import com.liferay.portal.model.Role;
030 import com.liferay.portal.model.RoleConstants;
031 import com.liferay.portal.security.permission.ResourceActionsUtil;
032 import com.liferay.portal.service.ResourceActionLocalServiceUtil;
033 import com.liferay.portal.service.ResourceBlockLocalServiceUtil;
034 import com.liferay.portal.service.ResourcePermissionLocalServiceUtil;
035 import com.liferay.portal.service.RoleLocalServiceUtil;
036 import com.liferay.portlet.bookmarks.model.BookmarksEntry;
037 import com.liferay.portlet.bookmarks.model.BookmarksFolder;
038
039 import java.sql.Connection;
040 import java.sql.PreparedStatement;
041 import java.sql.ResultSet;
042
043 import java.util.List;
044
045
050 public class UpgradePermission extends UpgradeProcess {
051
052 protected ResourceBlock convertResourcePermissions(
053 String tableName, String pkColumnName, long companyId, long groupId,
054 String name, long primKey)
055 throws SystemException {
056
057 PermissionedModel permissionedModel = new UpgradePermissionedModel(
058 tableName, pkColumnName, primKey);
059
060 ResourceBlockPermissionsContainer resourceBlockPermissionsContainer =
061 getResourceBlockPermissionsContainer(
062 companyId, groupId, name, primKey);
063
064 String permissionsHash =
065 resourceBlockPermissionsContainer.getPermissionsHash();
066
067 ResourceBlock resourceBlock =
068 ResourceBlockLocalServiceUtil.updateResourceBlockId(
069 companyId, groupId, name, permissionedModel, permissionsHash,
070 resourceBlockPermissionsContainer);
071
072 return resourceBlock;
073 }
074
075 protected void convertResourcePermissions(
076 String name, String tableName, String pkColumnName)
077 throws Exception {
078
079 Connection con = null;
080 PreparedStatement ps = null;
081 ResultSet rs = null;
082
083 try {
084 con = DataAccess.getUpgradeOptimizedConnection();
085
086 ps = con.prepareStatement(
087 "select " + pkColumnName + ", groupId, companyId from " +
088 tableName);
089
090 rs = ps.executeQuery();
091
092 while (rs.next()) {
093 long primKey = rs.getLong(pkColumnName);
094 long groupId = rs.getLong("groupId");
095 long companyId = rs.getLong("companyId");
096
097 ResourceBlock resourceBlock = convertResourcePermissions(
098 tableName, pkColumnName, companyId, groupId, name, primKey);
099
100 if (_log.isInfoEnabled() &&
101 ((resourceBlock.getResourceBlockId() % 100) == 0)) {
102
103 _log.info("Processed 100 resource blocks for " + name);
104 }
105 }
106 }
107 finally {
108 DataAccess.cleanUp(con, ps, rs);
109 }
110
111 List<ResourcePermission> resourcePermissions =
112 ResourcePermissionLocalServiceUtil.getScopeResourcePermissions(
113 _SCOPES);
114
115 for (ResourcePermission resourcePermission : resourcePermissions) {
116 int scope = resourcePermission.getScope();
117
118 if (!name.equals(resourcePermission.getName())) {
119 continue;
120 }
121
122 if ((scope == ResourceConstants.SCOPE_COMPANY) ||
123 (scope == ResourceConstants.SCOPE_GROUP_TEMPLATE)) {
124
125 ResourceBlockLocalServiceUtil.setCompanyScopePermissions(
126 resourcePermission.getCompanyId(), name,
127 resourcePermission.getRoleId(),
128 resourcePermission.getActionIds());
129 }
130 else if (scope == ResourceConstants.SCOPE_GROUP) {
131 ResourceBlockLocalServiceUtil.setGroupScopePermissions(
132 resourcePermission.getCompanyId(),
133 GetterUtil.getLong(resourcePermission.getPrimaryKey()),
134 name, resourcePermission.getRoleId(),
135 resourcePermission.getActionIds());
136 }
137 }
138 }
139
140 @Override
141 protected void doUpgrade() throws Exception {
142
143
144
145 List<String> modelActions = ResourceActionsUtil.getModelResourceActions(
146 Role.class.getName());
147
148 ResourceActionLocalServiceUtil.checkResourceActions(
149 Role.class.getName(), modelActions);
150
151
152
153 RoleLocalServiceUtil.checkSystemRoles();
154
155 updatePermissions("com.liferay.portlet.bookmarks", true, true);
156 updatePermissions("com.liferay.portlet.documentlibrary", false, true);
157 updatePermissions("com.liferay.portlet.imagegallery", true, true);
158 updatePermissions("com.liferay.portlet.messageboards", true, true);
159 updatePermissions("com.liferay.portlet.shopping", true, true);
160
161 convertResourcePermissions(
162 BookmarksEntry.class.getName(), "BookmarksEntry", "entryId");
163 convertResourcePermissions(
164 BookmarksFolder.class.getName(), "BookmarksFolder", "folderId");
165 }
166
167 protected ResourceBlockPermissionsContainer
168 getResourceBlockPermissionsContainer(
169 long companyId, long groupId, String name, long primKey)
170 throws SystemException {
171
172 ResourceBlockPermissionsContainer resourceBlockPermissionContainer =
173 new ResourceBlockPermissionsContainer();
174
175 List<ResourcePermission> resourcePermissions =
176 ResourcePermissionLocalServiceUtil.getResourceResourcePermissions(
177 companyId, groupId, name, String.valueOf(primKey));
178
179 for (ResourcePermission resourcePermission : resourcePermissions) {
180 resourceBlockPermissionContainer.addPermission(
181 resourcePermission.getRoleId(),
182 resourcePermission.getActionIds());
183 }
184
185 return resourceBlockPermissionContainer;
186 }
187
188 protected void updatePermissions(
189 String name, boolean community, boolean guest)
190 throws Exception {
191
192 List<String> modelActions = ResourceActionsUtil.getModelResourceActions(
193 name);
194
195 ResourceActionLocalServiceUtil.checkResourceActions(name, modelActions);
196
197 int scope = ResourceConstants.SCOPE_INDIVIDUAL;
198 long actionIdsLong = 1;
199
200 if (community) {
201 ResourcePermissionLocalServiceUtil.addResourcePermissions(
202 name, RoleConstants.ORGANIZATION_USER, scope, actionIdsLong);
203 ResourcePermissionLocalServiceUtil.addResourcePermissions(
204 name, RoleConstants.SITE_MEMBER, scope, actionIdsLong);
205 }
206
207 if (guest) {
208 ResourcePermissionLocalServiceUtil.addResourcePermissions(
209 name, RoleConstants.GUEST, scope, actionIdsLong);
210 }
211
212 ResourcePermissionLocalServiceUtil.addResourcePermissions(
213 name, RoleConstants.OWNER, scope, actionIdsLong);
214 }
215
216 private static final int[] _SCOPES = {
217 ResourceConstants.SCOPE_COMPANY, ResourceConstants.SCOPE_GROUP,
218 ResourceConstants.SCOPE_GROUP_TEMPLATE
219 };
220
221 private static Log _log = LogFactoryUtil.getLog(UpgradePermission.class);
222
223 private class UpgradePermissionedModel implements PermissionedModel {
224
225 public UpgradePermissionedModel(
226 String tableName, String pkColumnName, long primKey) {
227
228 _pkColumnName = pkColumnName;
229 _primKey = primKey;
230 _tableName = tableName;
231 }
232
233 @Override
234 public long getResourceBlockId() {
235 return _resourceBlockId;
236 }
237
238 @Override
239 public void persist() throws SystemException {
240 try {
241 StringBundler sb = new StringBundler(8);
242
243 sb.append("update ");
244 sb.append(_tableName);
245 sb.append(" set resourceBlockId = ");
246 sb.append(_resourceBlockId);
247 sb.append(" where ");
248 sb.append(_pkColumnName);
249 sb.append(" = ");
250 sb.append(_primKey);
251
252 runSQL(sb.toString());
253 }
254 catch (Exception e) {
255 throw new SystemException(e);
256 }
257 }
258
259 @Override
260 public void setResourceBlockId(long resourceBlockId) {
261 _resourceBlockId = resourceBlockId;
262 }
263
264 private String _pkColumnName;
265 private long _primKey;
266 private long _resourceBlockId;
267 private String _tableName;
268
269 }
270
271 }