@Transactional
public void createAuthorizedMembershipIfNotExists(TenantId tenantId, UserId userId, RoleDescriptor roleDescriptor, GroupDescriptor groupDescriptor) {
checkTenantMatch(tenantId, userId);
AuthorizedMembership membership = authorizedMembershipRepository.findByUserIdAndRoleId(userId.getId(), roleDescriptor.getRoleId(), groupDescriptor.getGroupId());
if (membership == null) {
Role r = roleRepository.findOne(roleDescriptor.getRoleId());
User u = userRepository.findOne(userId.getId());
Group g = groupRepository.findOne(groupDescriptor.getGroupId());
AuthorizedMembership authorizedMembership = new AuthorizedMembership(u, r, g);
authorizedMembershipRepository.save(authorizedMembership);
applicationEventPublisher.publishEvent(new AuthorizedMembershipCreatedEvent(this, tenantId, roleDescriptor, userId, groupDescriptor));
}
}