package de.flower.rmt.service; import de.flower.common.util.Check; import de.flower.rmt.model.db.entity.Role; import de.flower.rmt.model.db.entity.User; import de.flower.rmt.model.db.entity.User_; import de.flower.rmt.repository.IRoleRepo; import de.flower.rmt.repository.IUserRepo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; /** * @author flowerrrr */ @Service @Transactional(readOnly = true, propagation = Propagation.REQUIRED) public class RoleManager implements IRoleManager { @Autowired private IRoleRepo roleRepo; @Autowired private IUserRepo userRepo; @Autowired private IUserManager userManager; @Transactional(readOnly = false) public void addRole(Long userId, String roleName) { Check.notNull(userId); Check.notNull(roleName); User user = userManager.loadById(userId, User_.roles); if (!user.hasRole(roleName)) { Role role = new Role(roleName); role.setUser(user); user.getRoles().add(role); userRepo.save(user); roleRepo.save(role); } } @Transactional(readOnly = false) public void removeRole(Long userId, String roleName) { Check.notNull(userId); Check.notNull(roleName); User user = userManager.loadById(userId, User_.roles); Role role = user.findRole(roleName); if (role != null) { roleRepo.delete(role); Check.isTrue(user.getRoles().remove(role)); userRepo.save(user); } } @Override public boolean isManager(final Long userId) { Check.notNull(userId); User user = userManager.loadById(userId, User_.roles); return user.isManager(); } }