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 }
074 else if ((role.getType() == RoleConstants.TYPE_ORGANIZATION) ||
075 (role.getType() == RoleConstants.TYPE_PROVIDER) ||
076 (role.getType() == RoleConstants.TYPE_SITE)) {
077
078 scopes = new int[] {ResourceConstants.SCOPE_GROUP_TEMPLATE};
079 }
080
081 List<Permission> permissions = new ArrayList<>();
082
083 List<ResourcePermission> resourcePermissions =
084 ResourcePermissionLocalServiceUtil.getRoleResourcePermissions(
085 role.getRoleId(), scopes, QueryUtil.ALL_POS, QueryUtil.ALL_POS);
086
087 for (ResourcePermission resourcePermission : resourcePermissions) {
088 if ((permissionConversionFilter != null) &&
089 !permissionConversionFilter.accept(role, resourcePermission)) {
090
091 continue;
092 }
093
094 List<ResourceAction> resourceActions =
095 ResourceActionLocalServiceUtil.getResourceActions(
096 resourcePermission.getName());
097
098 for (ResourceAction resourceAction : resourceActions) {
099 if (ResourcePermissionLocalServiceUtil.hasActionId(
100 resourcePermission, resourceAction)) {
101
102 Permission permission = new PermissionImpl();
103
104 permission.setName(resourcePermission.getName());
105 permission.setScope(resourcePermission.getScope());
106 permission.setPrimKey(resourcePermission.getPrimKey());
107 permission.setActionId(resourceAction.getActionId());
108
109 permissions.add(permission);
110 }
111 }
112 }
113
114 List<ResourceTypePermission> resourceTypePermissions =
115 ResourceTypePermissionLocalServiceUtil.
116 getRoleResourceTypePermissions(role.getRoleId());
117
118 for (ResourceTypePermission resourceTypePermission :
119 resourceTypePermissions) {
120
121 if ((permissionConversionFilter != null) &&
122 !permissionConversionFilter.accept(
123 role, resourceTypePermission)) {
124
125 continue;
126 }
127
128 List<String> actionIds = ResourceBlockLocalServiceUtil.getActionIds(
129 resourceTypePermission.getName(),
130 resourceTypePermission.getActionIds());
131
132 for (String actionId : actionIds) {
133 Permission permission = new PermissionImpl();
134
135 permission.setName(resourceTypePermission.getName());
136
137 if (role.getType() == RoleConstants.TYPE_REGULAR) {
138 if (resourceTypePermission.isCompanyScope()) {
139 permission.setScope(ResourceConstants.SCOPE_COMPANY);
140 }
141 else {
142 permission.setScope(ResourceConstants.SCOPE_GROUP);
143 }
144 }
145 else {
146 permission.setScope(ResourceConstants.SCOPE_GROUP_TEMPLATE);
147 }
148
149 permission.setPrimKey(
150 String.valueOf(resourceTypePermission.getGroupId()));
151
152 permission.setActionId(actionId);
153
154 permissions.add(permission);
155 }
156 }
157
158 return permissions;
159 }
160
161 }