001
014
015 package com.liferay.portal.service.impl;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.model.ResourceBlock;
020 import com.liferay.portal.model.ResourceBlockConstants;
021 import com.liferay.portal.model.ResourceBlockPermission;
022 import com.liferay.portal.model.ResourceBlockPermissionsContainer;
023 import com.liferay.portal.service.base.ResourceBlockPermissionLocalServiceBaseImpl;
024
025 import java.util.HashMap;
026 import java.util.HashSet;
027 import java.util.List;
028 import java.util.Map;
029 import java.util.Set;
030
031
041 public class ResourceBlockPermissionLocalServiceImpl
042 extends ResourceBlockPermissionLocalServiceBaseImpl {
043
044 @Override
045 public void addResourceBlockPermissions(
046 long resourceBlockId,
047 ResourceBlockPermissionsContainer resourceBlockPermissionsContainer)
048 throws SystemException {
049
050 Map<Long, Long> permissions =
051 resourceBlockPermissionsContainer.getPermissions();
052
053 for (Map.Entry<Long, Long> permission : permissions.entrySet()) {
054 long resourceBlockPermissionId = counterLocalService.increment();
055
056 ResourceBlockPermission resourceBlockPermission =
057 resourceBlockPermissionPersistence.create(
058 resourceBlockPermissionId);
059
060 resourceBlockPermission.setResourceBlockId(resourceBlockId);
061 resourceBlockPermission.setRoleId(permission.getKey());
062 resourceBlockPermission.setActionIds(permission.getValue());
063
064 updateResourceBlockPermission(resourceBlockPermission);
065 }
066 }
067
068 @Override
069 public void deleteResourceBlockPermissions(long resourceBlockId)
070 throws SystemException {
071
072 resourceBlockPermissionPersistence.removeByResourceBlockId(
073 resourceBlockId);
074 }
075
076 @Override
077 public Map<Long, Set<String>> getAvailableResourceBlockPermissionActionIds(
078 long[] roleIds, String name, long primKey, List<String> actionIds)
079 throws PortalException, SystemException {
080
081 ResourceBlock resourceBlock =
082 resourceBlockLocalService.getResourceBlock(name, primKey);
083
084 Map<Long, Set<String>> roleIdsToActionIds =
085 new HashMap<Long, Set<String>>();
086
087 for (long roleId : roleIds) {
088 Set<String> availableActionIds = roleIdsToActionIds.get(roleId);
089
090 if (availableActionIds != null) {
091 continue;
092 }
093
094 List<String> resourceBlockActionIds =
095 resourceBlockLocalService.getPermissions(resourceBlock, roleId);
096
097 if (resourceBlockActionIds.isEmpty()) {
098 continue;
099 }
100
101 availableActionIds = new HashSet<String>();
102
103 roleIdsToActionIds.put(roleId, availableActionIds);
104
105 for (String actionId : actionIds) {
106 if (resourceBlockActionIds.contains(actionId)) {
107 availableActionIds.add(actionId);
108 }
109 }
110 }
111
112 return roleIdsToActionIds;
113 }
114
115 @Override
116 public ResourceBlockPermissionsContainer
117 getResourceBlockPermissionsContainer(long resourceBlockId)
118 throws SystemException {
119
120 List<ResourceBlockPermission> resourceBlockPermissions =
121 resourceBlockPermissionPersistence.findByResourceBlockId(
122 resourceBlockId);
123
124 ResourceBlockPermissionsContainer resourceBlockPermissionContainer =
125 new ResourceBlockPermissionsContainer();
126
127 for (ResourceBlockPermission resourceBlockPermission :
128 resourceBlockPermissions) {
129
130 resourceBlockPermissionContainer.setPermissions(
131 resourceBlockPermission.getRoleId(),
132 resourceBlockPermission.getActionIds());
133 }
134
135 return resourceBlockPermissionContainer;
136 }
137
138 @Override
139 public int getResourceBlockPermissionsCount(
140 long resourceBlockId, long roleId)
141 throws SystemException {
142
143 return resourceBlockPermissionPersistence.countByR_R(
144 resourceBlockId, roleId);
145 }
146
147 @Override
148 public void updateResourceBlockPermission(
149 long resourceBlockId, long roleId, long actionIdsLong, int operator)
150 throws SystemException {
151
152 ResourceBlockPermission resourceBlockPermission =
153 resourceBlockPermissionPersistence.fetchByR_R(
154 resourceBlockId, roleId);
155
156 if (resourceBlockPermission == null) {
157 if (actionIdsLong == 0) {
158 return;
159 }
160
161 long resourceBlockPermissionId = counterLocalService.increment();
162
163 resourceBlockPermission = resourceBlockPermissionPersistence.create(
164 resourceBlockPermissionId);
165
166 resourceBlockPermission.setResourceBlockId(resourceBlockId);
167 resourceBlockPermission.setRoleId(roleId);
168 }
169
170 if (operator == ResourceBlockConstants.OPERATOR_ADD) {
171 actionIdsLong |= resourceBlockPermission.getActionIds();
172 }
173 else if (operator == ResourceBlockConstants.OPERATOR_REMOVE) {
174 actionIdsLong =
175 resourceBlockPermission.getActionIds() & (~actionIdsLong);
176 }
177
178 if (actionIdsLong == 0) {
179 deleteResourceBlockPermission(resourceBlockPermission);
180 }
181 else {
182 resourceBlockPermission.setActionIds(actionIdsLong);
183
184 updateResourceBlockPermission(resourceBlockPermission);
185 }
186 }
187
188 }