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