Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package it.inaf.ia2.gms.manager;
import it.inaf.ia2.gms.exception.UnauthorizedException;
import it.inaf.ia2.gms.model.Permission;
import it.inaf.ia2.gms.model.RapUser;
import it.inaf.ia2.gms.persistence.LoggingDAO;
import it.inaf.ia2.gms.persistence.MembershipsDAO;
import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.persistence.model.MembershipEntity;
import it.inaf.ia2.gms.rap.RapClient;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MembershipManager extends UserAwareComponent {
@Autowired
private MembershipsDAO membershipsDAO;
@Autowired
private PermissionsManager permissionsManager;
@Autowired
private RapClient rapClient;
@Autowired
private LoggingDAO loggingDAO;
public List<GroupEntity> getCurrentUserMemberships() {
return membershipsDAO.getUserMemberships(getCurrentUserId());
}
public boolean isCurrentUserMemberOf(String groupId) {
return membershipsDAO.isMemberOf(getCurrentUserId(), groupId);
}
public List<RapUser> getMembers(GroupEntity group) {
Permission groupPermission = permissionsManager.getCurrentUserPermission(group);
if (groupPermission == Permission.TRAVERSE) {
throw new UnauthorizedException("You don't have the permission to view members");
}
List<MembershipEntity> memberships = membershipsDAO.findByGroup(group.getId());
Set<String> userIdentifiers = memberships.stream()
.map(m -> m.getUserId())
.collect(Collectors.toSet());
return rapClient.getUsers(userIdentifiers);
}
public MembershipEntity addMember(GroupEntity group, String userId) {
verifyUserCanManageMembers(group);
MembershipEntity membership = new MembershipEntity();
membership.setGroupId(group.getId());
membership.setUserId(userId);
membership = membershipsDAO.addMember(membership);
loggingDAO.logAction("Added member, group_id=" + group.getId() + ", user_id=" + userId);
return membership;
}
public void removeMember(GroupEntity group, String userId) {
verifyUserCanManageMembers(group);
membershipsDAO.removeMembership(group.getId(), userId);
loggingDAO.logAction("Member removed, group_id=" + group.getId() + ", user_id=" + userId);
}
private Permission verifyUserCanManageMembers(GroupEntity group) {
Permission permission = permissionsManager.getCurrentUserPermission(group);
if (permission != Permission.ADMIN && permission != Permission.MANAGE_MEMBERS) {
throw new UnauthorizedException("Missing admin or manage members permissions");
}
return permission;
}
}