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