package net.sf.gazpachoquest.services.core.impl; import java.util.List; import java.util.Set; import net.sf.gazpachoquest.domain.support.Permission; import net.sf.gazpachoquest.domain.support.Securizable; import net.sf.gazpachoquest.domain.user.Role; import net.sf.gazpachoquest.repository.support.GenericRepository; import net.sf.gazpachoquest.repository.user.UserRepository; import net.sf.gazpachoquest.services.permission.impl.PermissionSpecification; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; public abstract class AbstractPermissionsAwarePersistenceService<S extends Securizable<P>, P extends Permission<S>> extends AbstractPersistenceService<S> { protected AbstractPermissionsAwarePersistenceService(GenericRepository<S> repository) { super(repository); } @Autowired private UserRepository userRepository; @Override public List<S> findAll() { Integer userId = getAuthenticatedUser().getId(); Integer roleIds[] = toRoleIds(userRepository.getRoles(userId)); return repository.findAll(new PermissionSpecification<S, P>().canRead(userId, roleIds)); } @Override public Page<S> findPaginated(Integer pageNumber, Integer size) { Integer userId = getAuthenticatedUser().getId(); Integer roleIds[] = toRoleIds(userRepository.getRoles(userId)); return repository.findAll(new PermissionSpecification<S, P>().canRead(userId, roleIds), new PageRequest( pageNumber - 1, size)); } @Override public S save(S entity) { throw new UnsupportedOperationException("Method not supported in this implementation"); } private Integer[] toRoleIds(Set<Role> roles) { Integer[] roleIds = new Integer[roles.size()]; int i = 0; for (Role role : roles) { roleIds[i++] = role.getId(); } return roleIds; } }