001    /**
002     * Copyright (c) 2000-2013 Liferay, Inc. All rights reserved.
003     *
004     * This library is free software; you can redistribute it and/or modify it under
005     * the terms of the GNU Lesser General Public License as published by the Free
006     * Software Foundation; either version 2.1 of the License, or (at your option)
007     * any later version.
008     *
009     * This library is distributed in the hope that it will be useful, but WITHOUT
010     * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
011     * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
012     * details.
013     */
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.ResourceAction;
020    import com.liferay.portal.model.ResourceBlockConstants;
021    import com.liferay.portal.model.ResourceBlockPermissionsContainer;
022    import com.liferay.portal.model.ResourceTypePermission;
023    import com.liferay.portal.service.base.ResourceTypePermissionLocalServiceBaseImpl;
024    
025    import java.util.List;
026    
027    /**
028     * Provides the local service for accessing and updating resource type
029     * permissions.
030     *
031     * <p>
032     * Never call the update methods of this service directly, always go through the
033     * resource block local service.
034     * </p>
035     *
036     * @author Connor McKay
037     */
038    public class ResourceTypePermissionLocalServiceImpl
039            extends ResourceTypePermissionLocalServiceBaseImpl {
040    
041            public long getCompanyScopeActionIds(
042                            long companyId, String name, long roleId)
043                    throws SystemException {
044    
045                    return getGroupScopeActionIds(companyId, 0, name, roleId);
046            }
047    
048            public long getGroupScopeActionIds(
049                            long companyId, long groupId, String name, long roleId)
050                    throws SystemException {
051    
052                    ResourceTypePermission resourceTypePermission =
053                            resourceTypePermissionPersistence.fetchByC_G_N_R(
054                                    companyId, groupId, name, roleId);
055    
056                    if (resourceTypePermission == null) {
057                            return 0;
058                    }
059                    else {
060                            return resourceTypePermission.getActionIds();
061                    }
062            }
063    
064            public List<ResourceTypePermission> getGroupScopeResourceTypePermissions(
065                            long companyId, String name, long roleId)
066                    throws SystemException {
067    
068                    return resourceTypePermissionFinder.findByGroupScopeC_N_R(
069                            companyId, name, roleId);
070            }
071    
072            public ResourceBlockPermissionsContainer
073                            getResourceBlockPermissionsContainer(
074                                    long companyId, long groupId, String name)
075                    throws SystemException {
076    
077                    List<ResourceTypePermission> resourceTypePermissions =
078                            resourceTypePermissionFinder.findByEitherScopeC_G_N(
079                                    companyId, groupId, name);
080    
081                    ResourceBlockPermissionsContainer resourceBlockPermissionContainer =
082                            new ResourceBlockPermissionsContainer();
083    
084                    for (ResourceTypePermission resourceTypePermission :
085                                    resourceTypePermissions) {
086    
087                            resourceBlockPermissionContainer.setPermissions(
088                                    resourceTypePermission.getRoleId(),
089                                    resourceTypePermission.getActionIds());
090                    }
091    
092                    return resourceBlockPermissionContainer;
093            }
094    
095            public List<ResourceTypePermission> getRoleResourceTypePermissions(
096                            long roleId)
097                    throws SystemException {
098    
099                    return resourceTypePermissionPersistence.findByRoleId(roleId);
100            }
101    
102            public boolean hasCompanyScopePermission(
103                            long companyId, String name, long roleId, String actionId)
104                    throws PortalException, SystemException {
105    
106                    return hasGroupScopePermission(companyId, 0, name, roleId, actionId);
107            }
108    
109            public boolean hasEitherScopePermission(
110                            long companyId, String name, long roleId, String actionId)
111                    throws PortalException, SystemException {
112    
113                    ResourceAction resourceAction =
114                            resourceActionLocalService.getResourceAction(name, actionId);
115    
116                    List<ResourceTypePermission> resourceTypePermissions =
117                            resourceTypePermissionPersistence.findByC_N_R(
118                                    companyId, name, roleId);
119    
120                    for (ResourceTypePermission resourceTypePermission :
121                                    resourceTypePermissions) {
122    
123                            long actionIdsLong = resourceTypePermission.getActionIds();
124                            long bitwiseValue = resourceAction.getBitwiseValue();
125    
126                            if ((actionIdsLong & bitwiseValue) == bitwiseValue) {
127                                    return true;
128                            }
129                    }
130    
131                    return false;
132            }
133    
134            public boolean hasGroupScopePermission(
135                            long companyId, long groupId, String name, long roleId,
136                            String actionId)
137                    throws PortalException, SystemException {
138    
139                    ResourceAction resourceAction =
140                            resourceActionLocalService.getResourceAction(name, actionId);
141    
142                    ResourceTypePermission resourceTypePermission =
143                            resourceTypePermissionPersistence.findByC_G_N_R(
144                                    companyId, groupId, name, roleId);
145    
146                    long actionIdsLong = resourceTypePermission.getActionIds();
147                    long bitwiseValue = resourceAction.getBitwiseValue();
148    
149                    if ((actionIdsLong & bitwiseValue) == bitwiseValue) {
150                            return true;
151                    }
152                    else {
153                            return false;
154                    }
155            }
156    
157            public void updateCompanyScopeResourceTypePermissions(
158                            long companyId, String name, long roleId, long actionIdsLong,
159                            long operator)
160                    throws SystemException {
161    
162                    updateGroupScopeResourceTypePermissions(
163                            companyId, 0, name, roleId, actionIdsLong, operator);
164            }
165    
166            public void updateGroupScopeResourceTypePermissions(
167                            long companyId, long groupId, String name, long roleId,
168                            long actionIdsLong, long operator)
169                    throws SystemException {
170    
171                    ResourceTypePermission resourceTypePermission =
172                            resourceTypePermissionPersistence.fetchByC_G_N_R(
173                                    companyId, groupId, name, roleId);
174    
175                    if (resourceTypePermission == null) {
176                            if (actionIdsLong == 0) {
177                                    return;
178                            }
179    
180                            long resourceTypePermissionId = counterLocalService.increment();
181    
182                            resourceTypePermission = resourceTypePermissionPersistence.create(
183                                    resourceTypePermissionId);
184    
185                            resourceTypePermission.setCompanyId(companyId);
186                            resourceTypePermission.setGroupId(groupId);
187                            resourceTypePermission.setName(name);
188                            resourceTypePermission.setRoleId(roleId);
189                    }
190    
191                    if (operator == ResourceBlockConstants.OPERATOR_ADD) {
192                            actionIdsLong |= resourceTypePermission.getActionIds();
193                    }
194                    else if (operator == ResourceBlockConstants.OPERATOR_REMOVE) {
195                            actionIdsLong =
196                                    resourceTypePermission.getActionIds() & (~actionIdsLong);
197                    }
198    
199                    if (actionIdsLong == 0) {
200                            deleteResourceTypePermission(resourceTypePermission);
201                    }
202                    else {
203                            resourceTypePermission.setActionIds(actionIdsLong);
204    
205                            updateResourceTypePermission(resourceTypePermission);
206                    }
207            }
208    
209    }