Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -442,9 +442,21 @@ public void joinGroup(GroupModel group) {
joinGroup(group, null);
}

private boolean hasDirectGroup(GroupModel group) {
UserGroupMembershipEntity membership = em.createNamedQuery("userMemberOf", UserGroupMembershipEntity.class)
.setParameter("user", user)
.setParameter("groupId", group.getId())
.getSingleResultOrNull();
// Avoid keeping it in the persistence context, as the user might be detached for example in a bulk delete
if (membership != null) {
em.detach(membership);
}
return membership != null;
}

@Override
public void joinGroup(GroupModel group, MembershipMetadata metadata) {
if (RoleUtils.isDirectMember(getGroupsStream(), group)) return;
if (hasDirectGroup(group)) return;
joinGroupImpl(group, metadata);
}

Expand Down Expand Up @@ -513,6 +525,19 @@ public void grantRole(RoleModel role) {
RoleGrantedEvent.fire(role, this, session);
}

@Override
public boolean hasDirectRole(RoleModel role) {
UserRoleMappingEntity membership = em.createNamedQuery("userHasRole", UserRoleMappingEntity.class)
.setParameter("user", user)
.setParameter("roleId", role.getId())
.getSingleResultOrNull();
// Avoid keeping it in the persistence context, as the user might be detached for example in a bulk delete
if (membership != null) {
em.detach(membership);
}
return membership != null;
}

public void grantRoleImpl(RoleModel role) {
UserRoleMappingEntity entity = new UserRoleMappingEntity();
entity.setUser(getEntity());
Expand Down
Loading