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.security.permission;
016    
017    import com.liferay.portal.kernel.dao.orm.QueryUtil;
018    import com.liferay.portal.kernel.exception.PortalException;
019    import com.liferay.portal.kernel.exception.SystemException;
020    import com.liferay.portal.model.Permission;
021    import com.liferay.portal.model.ResourceAction;
022    import com.liferay.portal.model.ResourceConstants;
023    import com.liferay.portal.model.ResourcePermission;
024    import com.liferay.portal.model.ResourceTypePermission;
025    import com.liferay.portal.model.Role;
026    import com.liferay.portal.model.RoleConstants;
027    import com.liferay.portal.model.impl.PermissionImpl;
028    import com.liferay.portal.service.ResourceActionLocalServiceUtil;
029    import com.liferay.portal.service.ResourceBlockLocalServiceUtil;
030    import com.liferay.portal.service.ResourcePermissionLocalServiceUtil;
031    import com.liferay.portal.service.ResourceTypePermissionLocalServiceUtil;
032    import com.liferay.portal.service.RoleLocalServiceUtil;
033    
034    import java.util.ArrayList;
035    import java.util.List;
036    
037    /**
038     * @author Michael C. Han
039     */
040    public class PermissionConverterImpl implements PermissionConverter {
041    
042            @Override
043            public List<Permission> convertPermissions(long roleId)
044                    throws PortalException, SystemException {
045    
046                    return convertPermissions(roleId, null);
047            }
048    
049            @Override
050            public List<Permission> convertPermissions(
051                            long roleId, PermissionConversionFilter permissionConversionFilter)
052                    throws PortalException, SystemException {
053    
054                    Role role = RoleLocalServiceUtil.getRole(roleId);
055    
056                    return convertPermissions(role, permissionConversionFilter);
057            }
058    
059            @Override
060            public List<Permission> convertPermissions(Role role)
061                    throws SystemException {
062    
063                    return convertPermissions(role, null);
064            }
065    
066            @Override
067            public List<Permission> convertPermissions(
068                            Role role, PermissionConversionFilter permissionConversionFilter)
069                    throws SystemException {
070    
071                    int[] scopes = new int[0];
072    
073                    if (role.getType() == RoleConstants.TYPE_REGULAR) {
074                            scopes = new int[] {
075                                    ResourceConstants.SCOPE_COMPANY, ResourceConstants.SCOPE_GROUP};
076                    }
077                    else if ((role.getType() == RoleConstants.TYPE_ORGANIZATION) ||
078                                     (role.getType() == RoleConstants.TYPE_PROVIDER) ||
079                                     (role.getType() == RoleConstants.TYPE_SITE)) {
080    
081                            scopes = new int[] {ResourceConstants.SCOPE_GROUP_TEMPLATE};
082                    }
083    
084                    List<Permission> permissions = new ArrayList<Permission>();
085    
086                    List<ResourcePermission> resourcePermissions =
087                            ResourcePermissionLocalServiceUtil.getRoleResourcePermissions(
088                                    role.getRoleId(), scopes, QueryUtil.ALL_POS, QueryUtil.ALL_POS);
089    
090                    for (ResourcePermission resourcePermission : resourcePermissions) {
091                            if ((permissionConversionFilter != null) &&
092                                    !permissionConversionFilter.accept(role, resourcePermission)) {
093    
094                                    continue;
095                            }
096    
097                            List<ResourceAction> resourceActions =
098                                    ResourceActionLocalServiceUtil.getResourceActions(
099                                            resourcePermission.getName());
100    
101                            for (ResourceAction resourceAction : resourceActions) {
102                                    if (ResourcePermissionLocalServiceUtil.hasActionId(
103                                                    resourcePermission, resourceAction)) {
104    
105                                            Permission permission = new PermissionImpl();
106    
107                                            permission.setName(resourcePermission.getName());
108                                            permission.setScope(resourcePermission.getScope());
109                                            permission.setPrimKey(resourcePermission.getPrimKey());
110                                            permission.setActionId(resourceAction.getActionId());
111    
112                                            permissions.add(permission);
113                                    }
114                            }
115                    }
116    
117                    List<ResourceTypePermission> resourceTypePermissions =
118                            ResourceTypePermissionLocalServiceUtil.
119                                    getRoleResourceTypePermissions(role.getRoleId());
120    
121                    for (ResourceTypePermission resourceTypePermission :
122                                    resourceTypePermissions) {
123    
124                            if ((permissionConversionFilter != null) &&
125                                    !permissionConversionFilter.accept(
126                                            role, resourceTypePermission)) {
127    
128                                    continue;
129                            }
130    
131                            List<String> actionIds = ResourceBlockLocalServiceUtil.getActionIds(
132                                    resourceTypePermission.getName(),
133                                    resourceTypePermission.getActionIds());
134    
135                            for (String actionId : actionIds) {
136                                    Permission permission = new PermissionImpl();
137    
138                                    permission.setName(resourceTypePermission.getName());
139    
140                                    if (role.getType() == RoleConstants.TYPE_REGULAR) {
141                                            if (resourceTypePermission.isCompanyScope()) {
142                                                    permission.setScope(ResourceConstants.SCOPE_COMPANY);
143                                            }
144                                            else {
145                                                    permission.setScope(ResourceConstants.SCOPE_GROUP);
146                                            }
147                                    }
148                                    else {
149                                            permission.setScope(ResourceConstants.SCOPE_GROUP_TEMPLATE);
150                                    }
151    
152                                    permission.setPrimKey(
153                                            String.valueOf(resourceTypePermission.getGroupId()));
154    
155                                    permission.setActionId(actionId);
156    
157                                    permissions.add(permission);
158                            }
159                    }
160    
161                    return permissions;
162            }
163    
164    }