|
13 | 13 | import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser; |
14 | 14 | import edu.harvard.iq.dataverse.authorization.users.GuestUser; |
15 | 15 | import edu.harvard.iq.dataverse.authorization.users.PrivateUrlUser; |
| 16 | +import edu.harvard.iq.dataverse.authorization.users.User; |
16 | 17 | import edu.harvard.iq.dataverse.engine.command.DataverseRequest; |
17 | 18 | import edu.harvard.iq.dataverse.mydata.MyDataFilterParams; |
18 | 19 | import edu.harvard.iq.dataverse.privateurl.PrivateUrlUtil; |
|
23 | 24 | import java.util.TreeMap; |
24 | 25 | import java.util.logging.Logger; |
25 | 26 | import java.util.stream.Collectors; |
| 27 | + |
| 28 | +import edu.harvard.iq.dataverse.util.BundleUtil; |
26 | 29 | import jakarta.annotation.PostConstruct; |
27 | 30 | import jakarta.ejb.EJB; |
28 | 31 | import jakarta.ejb.Stateless; |
29 | 32 | import jakarta.inject.Named; |
30 | 33 | import jakarta.persistence.EntityManager; |
31 | | -import jakarta.persistence.NamedNativeQuery; |
32 | 34 | import jakarta.persistence.PersistenceContext; |
33 | 35 | import org.apache.commons.lang3.StringUtils; |
34 | 36 |
|
@@ -154,10 +156,41 @@ private String getRoleIdListClause(List<Long> roleIdList) { |
154 | 156 | return " AND r.role_id IN (" + StringUtils.join(outputList, ",") + ")"; |
155 | 157 | } |
156 | 158 |
|
| 159 | + /** |
| 160 | + * Retrieves the list of {@link DataverseRole}s selectable for the given {@link DataverseRequest}. |
| 161 | + * <p> |
| 162 | + * - If the user is a superuser, all roles are returned.<br> |
| 163 | + * - If the user is not a superuser, their assigned roles are returned. If none are assigned, |
| 164 | + * all roles are returned as a fallback. |
| 165 | + * <p> |
| 166 | + * This method is based on the logic from {@code MyDataPage.getRolesUsedToCreateCheckboxes}. |
| 167 | + * It has been implemented in this service to make the logic reusable from parts of the application |
| 168 | + * other than the JSF UI. |
| 169 | + * |
| 170 | + * @param request the dataverse request containing user context |
| 171 | + * @return a list of relevant {@link DataverseRole}s for the user |
| 172 | + * @throws NullPointerException if the request is null |
| 173 | + */ |
| 174 | + public List<DataverseRole> getSelectableDataverseRolesFor(DataverseRequest request) { |
| 175 | + if (request == null) { |
| 176 | + throw new NullPointerException(BundleUtil.getStringFromBundle("roleAssigneeServiceBean.error.dataverseRequestCannotBeNull")); |
| 177 | + } |
| 178 | + |
| 179 | + User user = request.getUser(); |
| 180 | + |
| 181 | + if (user.isSuperuser()) { |
| 182 | + return dataverseRoleService.findAll(); |
| 183 | + } |
| 184 | + |
| 185 | + List<DataverseRole> assignedRoles = getAssigneeDataverseRoleFor(request); |
| 186 | + |
| 187 | + return assignedRoles.isEmpty() ? dataverseRoleService.findAll() : assignedRoles; |
| 188 | + } |
| 189 | + |
157 | 190 | public List<DataverseRole> getAssigneeDataverseRoleFor(DataverseRequest dataverseRequest) { |
158 | 191 |
|
159 | 192 | if (dataverseRequest == null){ |
160 | | - throw new NullPointerException("dataverseRequest cannot be null!"); |
| 193 | + throw new NullPointerException(BundleUtil.getStringFromBundle("roleAssigneeServiceBean.error.dataverseRequestCannotBeNull")); |
161 | 194 | } |
162 | 195 | AuthenticatedUser au = dataverseRequest.getAuthenticatedUser(); |
163 | 196 | if (au.getUserIdentifier() == null){ |
@@ -223,7 +256,7 @@ public List<Object[]> getAssigneeAndRoleIdListFor(MyDataFilterParams filterParam |
223 | 256 |
|
224 | 257 | public List<Long> getRoleIdListForGivenAssigneeDvObject(DataverseRequest dataverseRequest, List<Long> roleIdList, Long defPointId) { |
225 | 258 | if (dataverseRequest == null){ |
226 | | - throw new NullPointerException("dataverseRequest cannot be null!"); |
| 259 | + throw new NullPointerException(BundleUtil.getStringFromBundle("roleAssigneeServiceBean.error.dataverseRequestCannotBeNull")); |
227 | 260 | } |
228 | 261 | AuthenticatedUser au = dataverseRequest.getAuthenticatedUser(); |
229 | 262 | if (au.getUserIdentifier() == null){ |
@@ -292,7 +325,7 @@ private String getGroupIdentifierClause(String roleAssigneeIdentifier, List<Stri |
292 | 325 |
|
293 | 326 | public List<Object[]> getRoleIdsFor(DataverseRequest dataverseRequest, List<Long> dvObjectIdList) { |
294 | 327 | if (dataverseRequest == null){ |
295 | | - throw new NullPointerException("dataverseRequest cannot be null!"); |
| 328 | + throw new NullPointerException(BundleUtil.getStringFromBundle("roleAssigneeServiceBean.error.dataverseRequestCannotBeNull")); |
296 | 329 | } |
297 | 330 | AuthenticatedUser au = dataverseRequest.getAuthenticatedUser(); |
298 | 331 | if (au.getUserIdentifier() == null){ |
|
0 commit comments