Skip to content

Commit 32cf119

Browse files
authored
[SYNCOPE-1999] Fixing managed users / groups / any objects find operations (#1557)
1 parent e5f80fc commit 32cf119

17 files changed

Lines changed: 1164 additions & 398 deletions

File tree

‎core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/GroupDAO.java‎

Lines changed: 61 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,13 @@ public interface GroupDAO extends AnyDAO<Group> {
3838

3939
Optional<? extends Group> findByName(String name);
4040

41+
List<String> findKeysByNamePattern(String pattern);
42+
4143
@Override
4244
Collection<String> findAllResourceKeys(String key);
4345

46+
Map<String, Long> countByRealm();
47+
4448
/**
4549
* Checks if the calling user is authorized to access the Group matching the provided key, under the given
4650
* realm.
@@ -51,33 +55,73 @@ public interface GroupDAO extends AnyDAO<Group> {
5155
*/
5256
void securityChecks(Set<String> authRealms, String key, String realm);
5357

54-
boolean isManager(String key);
55-
56-
List<User> findManagedUsers(String key);
57-
58-
List<Group> findManagedGroups(String key);
59-
60-
List<AnyObject> findManagedAnyObjects(String key);
61-
62-
Map<String, Long> countByRealm();
58+
long countUMembers(String groupKey);
6359

64-
List<String> findKeysByNamePattern(String pattern);
60+
List<String> findUMembers(String groupKey);
6561

66-
List<AMembership> findAMemberships(Group group);
62+
boolean existsUMembership(String userKey, String groupKey);
6763

6864
List<UMembership> findUMemberships(Group group, Pageable pageable);
6965

70-
List<String> findAMembers(String groupKey);
66+
long countAMembers(String groupKey);
7167

72-
List<String> findUMembers(String groupKey);
68+
List<String> findAMembers(String groupKey);
7369

7470
boolean existsAMembership(String anyObjectKey, String groupKey);
7571

76-
boolean existsUMembership(String userKey, String groupKey);
72+
List<AMembership> findAMemberships(Group group);
7773

78-
long countAMembers(String groupKey);
74+
List<GroupTypeExtension> findTypeExtensions(AnyTypeClass anyTypeClass);
7975

80-
long countUMembers(String groupKey);
76+
boolean isManager(String key);
8177

82-
List<GroupTypeExtension> findTypeExtensions(AnyTypeClass anyTypeClass);
78+
/**
79+
* Returns all users managed by the group for the given key.
80+
*
81+
* Given:
82+
* * group G1 for the provided key
83+
* * group G2, with user member U
84+
*
85+
* then we have 2 cases where U is managed by G1:
86+
*
87+
* (a) U has gManager set to G1
88+
* (b) G2 has gManager set to G1
89+
*
90+
* @param key manager key
91+
* @return users managed by the group for the given key
92+
*/
93+
List<User> findManagedUsers(String key);
94+
95+
/**
96+
* Returns all groups managed by the group for the given key.
97+
*
98+
* Given:
99+
* * group G1 for the provided key
100+
* * group G2
101+
*
102+
* then we have 1 case where G2 is managed by G1:
103+
*
104+
* (a) G2 has gManager set to G1
105+
*
106+
* @param key manager key
107+
* @return groups managed by the group for the given key
108+
*/
109+
List<Group> findManagedGroups(String key);
110+
111+
/**
112+
* Returns all any objects managed by the group for the given key.
113+
*
114+
* Given:
115+
* * group G1 for the provided key
116+
* * group G2, with any object member O
117+
*
118+
* then we have 2 cases where O is managed by G1:
119+
*
120+
* (a) O has gManager set to G1
121+
* (b) G2 has gManager set to G1
122+
*
123+
* @param key manager key
124+
* @return any objects managed by the group for the given key
125+
*/
126+
List<AnyObject> findManagedAnyObjects(String key);
83127
}

‎core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/UserDAO.java‎

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,59 @@ public interface UserDAO extends AnyDAO<User> {
5151

5252
boolean isManager(String key);
5353

54+
/**
55+
* Returns all users managed by the user for the given key.
56+
*
57+
* Given:
58+
* * user U1 for the provided key, member of group G1
59+
* * user U2, member of group G2
60+
*
61+
* then we have 4 cases where U2 is managed by U1:
62+
*
63+
* (a) U2 has uManager set to U1
64+
* (b) G2 has uManager set to U1
65+
* (c) U2 has gManager set to G1
66+
* (d) G2 has gManager set to G1
67+
*
68+
* @param key manager key
69+
* @return users managed by the user for the given key
70+
*/
5471
List<User> findManagedUsers(String key);
5572

73+
/**
74+
* Returns all groups managed by the user for the given key.
75+
*
76+
* Given:
77+
* * user U1 for the provided key, member of group G1
78+
* * group G2
79+
*
80+
* then we have 2 cases where G2 is managed by U1:
81+
*
82+
* (a) G2 has uManager set to U1
83+
* (b) G2 has gManager set to G1
84+
*
85+
* @param key manager key
86+
* @return groups managed by the user for the given key
87+
*/
5688
List<Group> findManagedGroups(String key);
5789

90+
/**
91+
* Returns all any objects managed by the user for the given key.
92+
*
93+
* Given:
94+
* * user U for the provided key, member of group G1
95+
* * any object O, member of group G2
96+
*
97+
* then we have 4 cases where O is managed by U:
98+
*
99+
* (a) O has uManager set to U
100+
* (b) G2 has uManager set to U
101+
* (c) O has gManager set to G1
102+
* (d) G2 has gManager set to G1
103+
*
104+
* @param key manager key
105+
* @return any objects managed by the user for the given key
106+
*/
58107
List<AnyObject> findManagedAnyObjects(String key);
59108

60109
Map<String, Long> countByRealm();

‎core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/repo/GroupRepo.java‎

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -41,20 +41,4 @@ public interface GroupRepo
4141
@Query("SELECT e FROM #{#entityName} e WHERE e.id IN (:keys)")
4242
@Override
4343
List<Group> findByKeys(@Param("keys") List<String> keys);
44-
45-
@Query("SELECT DISTINCT e.leftEnd.id FROM JPAAMembership e WHERE e.rightEnd.id = :groupKey")
46-
@Override
47-
List<String> findAMembers(@Param("groupKey") String groupKey);
48-
49-
@Query("SELECT DISTINCT e.leftEnd.id FROM JPAUMembership e WHERE e.rightEnd.id = :groupKey")
50-
@Override
51-
List<String> findUMembers(@Param("groupKey") String groupKey);
52-
53-
@Query("SELECT COUNT(DISTINCT e.leftEnd.id) FROM JPAAMembership e WHERE e.rightEnd.id = :groupKey")
54-
@Override
55-
long countAMembers(@Param("groupKey") String groupKey);
56-
57-
@Query("SELECT COUNT(DISTINCT e.leftEnd.id) FROM JPAUMembership e WHERE e.rightEnd.id = :groupKey")
58-
@Override
59-
long countUMembers(@Param("groupKey") String groupKey);
6044
}

‎core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/repo/GroupRepoExt.java‎

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -32,28 +32,36 @@
3232

3333
public interface GroupRepoExt extends AnyRepoExt<Group> {
3434

35+
Map<String, Long> countByRealm();
36+
3537
void securityChecks(Set<String> authRealms, String key, String realm);
3638

37-
boolean isManager(String key);
39+
long countUMembers(String groupKey);
3840

39-
List<User> findManagedUsers(String key);
41+
List<String> findUMembers(String groupKey);
4042

41-
List<Group> findManagedGroups(String key);
43+
boolean existsUMembership(String userKey, String groupKey);
4244

43-
List<AnyObject> findManagedAnyObjects(String key);
45+
List<UMembership> findUMemberships(Group group, Pageable pageable);
4446

45-
Map<String, Long> countByRealm();
47+
long countAMembers(String groupKey);
4648

47-
boolean existsAMembership(String anyObjectKey, String groupKey);
49+
List<String> findAMembers(String groupKey);
4850

49-
boolean existsUMembership(String userKey, String groupKey);
51+
boolean existsAMembership(String anyObjectKey, String groupKey);
5052

5153
List<AMembership> findAMemberships(Group group);
5254

53-
List<UMembership> findUMemberships(Group group, Pageable pageable);
54-
5555
List<GroupTypeExtension> findTypeExtensions(AnyTypeClass anyTypeClass);
5656

57+
boolean isManager(String key);
58+
59+
List<User> findManagedUsers(String key);
60+
61+
List<Group> findManagedGroups(String key);
62+
63+
List<AnyObject> findManagedAnyObjects(String key);
64+
5765
@Override
5866
<S extends Group> S save(S group);
5967

0 commit comments

Comments
 (0)