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.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
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 }