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