001
014
015 package com.liferay.portal.upgrade.v6_0_12_to_6_1_0;
016
017 import com.liferay.portal.kernel.dao.jdbc.DataAccess;
018 import com.liferay.portal.kernel.exception.PortalException;
019 import com.liferay.portal.kernel.exception.SystemException;
020 import com.liferay.portal.kernel.log.Log;
021 import com.liferay.portal.kernel.log.LogFactoryUtil;
022 import com.liferay.portal.kernel.upgrade.UpgradeProcess;
023 import com.liferay.portal.kernel.util.GetterUtil;
024 import com.liferay.portal.model.GroupedModel;
025 import com.liferay.portal.model.PermissionedModel;
026 import com.liferay.portal.model.ResourceBlock;
027 import com.liferay.portal.model.ResourceBlockPermissionsContainer;
028 import com.liferay.portal.model.ResourceConstants;
029 import com.liferay.portal.model.ResourcePermission;
030 import com.liferay.portal.service.ResourceBlockLocalServiceUtil;
031 import com.liferay.portal.service.ResourcePermissionLocalServiceUtil;
032 import com.liferay.portal.util.PropsValues;
033 import com.liferay.portlet.bookmarks.model.BookmarksEntry;
034 import com.liferay.portlet.bookmarks.model.BookmarksFolder;
035
036 import java.sql.Connection;
037 import java.sql.PreparedStatement;
038 import java.sql.ResultSet;
039
040 import java.util.List;
041
042
046 public class UpgradePermission extends UpgradeProcess {
047
048 protected ResourceBlock convertResourcePermissions(
049 long companyId, String name, long primKey)
050 throws PortalException, SystemException {
051
052 PermissionedModel permissionedModel =
053 ResourceBlockLocalServiceUtil.getPermissionedModel(name, primKey);
054
055 long groupId = 0;
056
057 if (permissionedModel instanceof GroupedModel) {
058 GroupedModel groupedModel = (GroupedModel)permissionedModel;
059
060 groupId = groupedModel.getGroupId();
061 }
062
063 ResourceBlockPermissionsContainer resourceBlockPermissionsContainer =
064 getResourceBlockPermissionsContainer(
065 companyId, groupId, name, primKey);
066
067 String permissionsHash =
068 resourceBlockPermissionsContainer.getPermissionsHash();
069
070 ResourceBlock resourceBlock =
071 ResourceBlockLocalServiceUtil.updateResourceBlockId(
072 companyId, groupId, name, permissionedModel, permissionsHash,
073 resourceBlockPermissionsContainer);
074
075 return resourceBlock;
076 }
077
078 protected void convertResourcePermissions(
079 String name, String tableName, String pkColumnName)
080 throws Exception {
081
082 Connection con = null;
083 PreparedStatement ps = null;
084 ResultSet rs = null;
085
086 try {
087 con = DataAccess.getUpgradeOptimizedConnection();
088
089 ps = con.prepareStatement(
090 "select " + pkColumnName + ", companyId from " + tableName);
091
092 rs = ps.executeQuery();
093
094 while (rs.next()) {
095 long primKey = rs.getLong(pkColumnName);
096 long companyId = rs.getLong("companyId");
097
098 ResourceBlock resourceBlock = convertResourcePermissions(
099 companyId, name, primKey);
100
101 if (_log.isInfoEnabled() &&
102 ((resourceBlock.getResourceBlockId() % 100) == 0)) {
103
104 _log.info("Processed 100 resource blocks for " + name);
105 }
106 }
107 }
108 finally {
109 DataAccess.cleanUp(con, ps, rs);
110 }
111
112 List<ResourcePermission> resourcePermissions =
113 ResourcePermissionLocalServiceUtil.getScopeResourcePermissions(
114 _SCOPES);
115
116 for (ResourcePermission resourcePermission : resourcePermissions) {
117 int scope = resourcePermission.getScope();
118
119 if (!name.equals(resourcePermission.getName())) {
120 continue;
121 }
122
123 if ((scope == ResourceConstants.SCOPE_COMPANY) ||
124 (scope == ResourceConstants.SCOPE_GROUP_TEMPLATE)) {
125
126 ResourceBlockLocalServiceUtil.setCompanyScopePermissions(
127 resourcePermission.getCompanyId(), name,
128 resourcePermission.getRoleId(),
129 resourcePermission.getActionIds());
130 }
131 else if (scope == ResourceConstants.SCOPE_GROUP) {
132 ResourceBlockLocalServiceUtil.setGroupScopePermissions(
133 resourcePermission.getCompanyId(),
134 GetterUtil.getLong(resourcePermission.getPrimaryKey()),
135 name, resourcePermission.getRoleId(),
136 resourcePermission.getActionIds());
137 }
138 }
139 }
140
141 @Override
142 protected void doUpgrade() throws Exception {
143 if (PropsValues.PERMISSIONS_USER_CHECK_ALGORITHM == 6) {
144 convertResourcePermissions(
145 BookmarksEntry.class.getName(), "BookmarksEntry", "entryId");
146 convertResourcePermissions(
147 BookmarksFolder.class.getName(), "BookmarksFolder", "folderId");
148 }
149 }
150
151 protected ResourceBlockPermissionsContainer
152 getResourceBlockPermissionsContainer(
153 long companyId, long groupId, String name, long primKey)
154 throws SystemException {
155
156 ResourceBlockPermissionsContainer resourceBlockPermissionContainer =
157 new ResourceBlockPermissionsContainer();
158
159 List<ResourcePermission> resourcePermissions =
160 ResourcePermissionLocalServiceUtil.getResourceResourcePermissions(
161 companyId, groupId, name, String.valueOf(primKey));
162
163 for (ResourcePermission resourcePermission : resourcePermissions) {
164 resourceBlockPermissionContainer.addPermission(
165 resourcePermission.getRoleId(),
166 resourcePermission.getActionIds());
167 }
168
169 return resourceBlockPermissionContainer;
170 }
171
172 private static final int[] _SCOPES = {
173 ResourceConstants.SCOPE_COMPANY, ResourceConstants.SCOPE_GROUP,
174 ResourceConstants.SCOPE_GROUP_TEMPLATE
175 };
176
177 private static Log _log = LogFactoryUtil.getLog(UpgradePermission.class);
178
179 }