|
13 | 13 | import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser; |
14 | 14 | import edu.harvard.iq.dataverse.authorization.users.User; |
15 | 15 | import edu.harvard.iq.dataverse.engine.command.Command; |
16 | | -import java.util.EnumSet; |
17 | | -import java.util.Map; |
18 | | -import java.util.Set; |
| 16 | + |
| 17 | +import java.util.*; |
19 | 18 | import java.util.logging.Logger; |
20 | 19 | import jakarta.ejb.EJB; |
21 | 20 | import jakarta.ejb.Stateless; |
22 | 21 | import jakarta.inject.Inject; |
23 | 22 | import jakarta.inject.Named; |
24 | | -import java.util.HashSet; |
25 | | -import java.util.List; |
26 | 23 | import jakarta.persistence.EntityManager; |
27 | 24 | import jakarta.persistence.PersistenceContext; |
28 | 25 | import static edu.harvard.iq.dataverse.engine.command.CommandHelper.CH; |
|
34 | 31 | import edu.harvard.iq.dataverse.workflow.PendingWorkflowInvocation; |
35 | 32 | import edu.harvard.iq.dataverse.workflow.WorkflowServiceBean; |
36 | 33 |
|
37 | | -import java.util.Arrays; |
38 | | -import java.util.Collections; |
39 | | -import java.util.HashMap; |
40 | | -import java.util.LinkedList; |
41 | 34 | import java.util.stream.Collectors; |
| 35 | +import java.util.stream.Stream; |
| 36 | + |
42 | 37 | import static java.util.stream.Collectors.toList; |
43 | 38 | import jakarta.persistence.Query; |
44 | 39 | import jakarta.persistence.criteria.CriteriaBuilder; |
@@ -926,6 +921,7 @@ private boolean hasUnrestrictedReleasedFiles(DatasetVersion targetDatasetVersion |
926 | 921 | public List<Dataverse> findPermittedCollections(DataverseRequest request, AuthenticatedUser user, Permission permission) { |
927 | 922 | return findPermittedCollections(request, user, 1 << permission.ordinal()); |
928 | 923 | } |
| 924 | + |
929 | 925 | public List<Dataverse> findPermittedCollections(DataverseRequest request, AuthenticatedUser user, int permissionBit) { |
930 | 926 | if (user != null) { |
931 | 927 | // IP Group - Only check IP if a User is calling for themself |
@@ -963,5 +959,31 @@ public List<Dataverse> findPermittedCollections(DataverseRequest request, Authen |
963 | 959 | } |
964 | 960 | return null; |
965 | 961 | } |
| 962 | + |
| 963 | + /** |
| 964 | + * Calculates the complete list of role assignments for a given user on a DvObject. |
| 965 | + * This includes roles assigned directly to the user and roles inherited from any groups |
| 966 | + * the user is a member of. |
| 967 | + * <p> |
| 968 | + * This method's logic is based on the private method {@code getRoleStringFromUser} |
| 969 | + * in the {@code DataverseUserPage} class, which produces a concatenated string of |
| 970 | + * effective user role names required for displaying role-related user notifications. |
| 971 | + * The common logic from these two methods may be centralized in the future to |
| 972 | + * avoid code duplication. |
| 973 | + * |
| 974 | + * @param user The authenticated user whose roles are being checked. |
| 975 | + * @param dvObject The dataverse object to check for role assignments. |
| 976 | + * @return A List containing all effective RoleAssignments for the user. Never null. |
| 977 | + */ |
| 978 | + public List<RoleAssignment> getEffectiveRoleAssignments(AuthenticatedUser user, DvObject dvObject) { |
| 979 | + Stream<RoleAssignment> directAssignments = assignmentsFor(user, dvObject).stream(); |
| 980 | + |
| 981 | + Stream<RoleAssignment> groupAssignments = groupService.groupsFor(user, dvObject) |
| 982 | + .stream() |
| 983 | + .flatMap(group -> assignmentsFor(group, dvObject).stream()); |
| 984 | + |
| 985 | + return Stream.concat(directAssignments, groupAssignments) |
| 986 | + .collect(Collectors.toList()); |
| 987 | + } |
966 | 988 | } |
967 | 989 |
|
0 commit comments