Commit 4e39694e authored by zhengjie's avatar zhengjie
Browse files

v1.6 版本发布 ,详情查看版本说明

parent f63407fd
......@@ -3,13 +3,15 @@ package me.zhengjie.modules.system.domain.vo;
import lombok.AllArgsConstructor;
import lombok.Data;
import java.io.Serializable;
/**
* @author jie
* @date 2018-12-20
*/
@Data
@AllArgsConstructor
public class MenuMetaVo {
public class MenuMetaVo implements Serializable {
private String title;
......
......@@ -3,6 +3,7 @@ package me.zhengjie.modules.system.domain.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
......@@ -12,7 +13,7 @@ import java.util.List;
*/
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class MenuVo {
public class MenuVo implements Serializable {
private String name;
......
......@@ -4,6 +4,9 @@ import me.zhengjie.modules.system.domain.Menu;
import me.zhengjie.modules.system.domain.Role;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
......@@ -20,17 +23,12 @@ public interface MenuRepository extends JpaRepository<Menu, Long>, JpaSpecificat
*/
Menu findByName(String name);
/**
* findByRoles
* @param roleSet
* @return
*/
Set<Menu> findByRolesOrderBySort(Set<Role> roleSet);
/**
* findByPid
* @param pid
* @return
*/
List<Menu> findByPid(long pid);
LinkedHashSet<Menu> findByRoles_IdOrderBySortAsc(Long id);
}
......@@ -4,6 +4,8 @@ import me.zhengjie.modules.system.domain.Permission;
import me.zhengjie.modules.system.domain.Role;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.Collection;
import java.util.List;
import java.util.Set;
......@@ -20,17 +22,12 @@ public interface PermissionRepository extends JpaRepository<Permission, Long>, J
*/
Permission findByName(String name);
/**
* findByRoles
* @param roleSet
* @return
*/
Set<Permission> findByRoles(Set<Role> roleSet);
/**
* findByPid
* @param pid
* @return
*/
List<Permission> findByPid(long pid);
Set<Permission> findByRoles_Id(Long id);
}
......@@ -4,6 +4,8 @@ import me.zhengjie.modules.system.domain.Role;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import java.util.Set;
/**
* @author jie
* @date 2018-12-03
......@@ -16,4 +18,6 @@ public interface RoleRepository extends JpaRepository<Role, Long>, JpaSpecificat
* @return
*/
Role findByName(String name);
Set<Role> findByUsers_Id(Long id);
}
......@@ -5,8 +5,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import java.util.Date;
/**
......@@ -20,16 +18,14 @@ public interface UserRepository extends JpaRepository<User, Long>, JpaSpecificat
* @param username
* @return
*/
@Query("from User u join fetch u.roles where u.username = :username")
User findByUsername(@Param("username") String username);
User findByUsername(String username);
/**
* findByEmail
* @param email
* @return
*/
@Query("from User u join fetch u.roles where u.email = :email")
User findByEmail(@Param("email") String email);
User findByEmail(String email);
/**
* 修改密码
......
......@@ -4,8 +4,8 @@ import me.zhengjie.aop.log.Log;
import me.zhengjie.modules.system.domain.Menu;
import me.zhengjie.modules.system.domain.User;
import me.zhengjie.exception.BadRequestException;
import me.zhengjie.modules.security.utils.JwtTokenUtil;
import me.zhengjie.modules.system.service.MenuService;
import me.zhengjie.modules.system.service.RoleService;
import me.zhengjie.modules.system.service.UserService;
import me.zhengjie.modules.system.service.dto.MenuDTO;
import me.zhengjie.modules.system.service.query.MenuQueryService;
......@@ -17,7 +17,6 @@ import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
/**
......@@ -28,9 +27,6 @@ import java.util.List;
@RequestMapping("api")
public class MenuController {
@Autowired
private JwtTokenUtil jwtTokenUtil;
@Autowired
private MenuService menuService;
......@@ -40,13 +36,10 @@ public class MenuController {
@Autowired
private UserService userService;
private static final String ENTITY_NAME = "menu";
@Autowired
private RoleService roleService;
@GetMapping(value = "/menus/{id}")
@PreAuthorize("hasAnyRole('ADMIN','MENU_ALL','MENU_SELECT')")
public ResponseEntity getMenus(@PathVariable Long id){
return new ResponseEntity(menuService.findById(id), HttpStatus.OK);
}
private static final String ENTITY_NAME = "menu";
/**
* 构建前端路由所需要的菜单
......@@ -56,7 +49,7 @@ public class MenuController {
public ResponseEntity buildMenus(){
UserDetails userDetails = SecurityContextHolder.getUserDetails();
User user = userService.findByName(userDetails.getUsername());
List<MenuDTO> menuDTOList = menuService.findByRoles(user.getRoles());
List<MenuDTO> menuDTOList = menuService.findByRoles(roleService.findByUsers_Id(user.getId()));
List<MenuDTO> menuDTOTree = (List<MenuDTO>)menuService.buildTree(menuDTOList).get("content");
return new ResponseEntity(menuService.buildMenus(menuDTOTree),HttpStatus.OK);
}
......@@ -66,7 +59,7 @@ public class MenuController {
* @return
*/
@GetMapping(value = "/menus/tree")
@PreAuthorize("hasAnyRole('ADMIN','MENU_ALL','MENU_SELECT')")
@PreAuthorize("hasAnyRole('ADMIN','MENU_ALL','MENU_SELECT','ROLES_SELECT','ROLES_ALL')")
public ResponseEntity getMenuTree(){
return new ResponseEntity(menuService.getMenuTree(menuService.findByPid(0L)),HttpStatus.OK);
}
......@@ -92,10 +85,7 @@ public class MenuController {
@Log("修改菜单")
@PutMapping(value = "/menus")
@PreAuthorize("hasAnyRole('ADMIN','MENU_ALL','MENU_EDIT')")
public ResponseEntity update(@Validated @RequestBody Menu resources){
if (resources.getId() == null) {
throw new BadRequestException(ENTITY_NAME +" ID Can not be empty");
}
public ResponseEntity update(@Validated(Menu.Update.class) @RequestBody Menu resources){
menuService.update(resources);
return new ResponseEntity(HttpStatus.NO_CONTENT);
}
......
......@@ -31,12 +31,6 @@ public class PermissionController {
private static final String ENTITY_NAME = "permission";
@GetMapping(value = "/permissions/{id}")
@PreAuthorize("hasAnyRole('ADMIN','PERMISSION_ALL','PERMISSION_SELECT')")
public ResponseEntity getPermissions(@PathVariable Long id){
return new ResponseEntity(permissionService.findById(id), HttpStatus.OK);
}
/**
* 返回全部的权限,新增角色时下拉选择
* @return
......@@ -68,10 +62,7 @@ public class PermissionController {
@Log("修改权限")
@PutMapping(value = "/permissions")
@PreAuthorize("hasAnyRole('ADMIN','PERMISSION_ALL','PERMISSION_EDIT')")
public ResponseEntity update(@Validated @RequestBody Permission resources){
if (resources.getId() == null) {
throw new BadRequestException(ENTITY_NAME +" ID Can not be empty");
}
public ResponseEntity update(@Validated(Permission.Update.class) @RequestBody Permission resources){
permissionService.update(resources);
return new ResponseEntity(HttpStatus.NO_CONTENT);
}
......
......@@ -41,7 +41,7 @@ public class RoleController {
* @return
*/
@GetMapping(value = "/roles/tree")
@PreAuthorize("hasAnyRole('ADMIN','MENU_ALL','MENU_SELECT','ROLES_ALL','USER_ALL','USER_SELECT')")
@PreAuthorize("hasAnyRole('ADMIN','ROLES_ALL','USER_ALL','USER_SELECT')")
public ResponseEntity getRoleTree(){
return new ResponseEntity(roleService.getRoleTree(),HttpStatus.OK);
}
......@@ -66,14 +66,27 @@ public class RoleController {
@Log("修改角色")
@PutMapping(value = "/roles")
@PreAuthorize("hasAnyRole('ADMIN','ROLES_ALL','ROLES_EDIT')")
public ResponseEntity update(@Validated @RequestBody Role resources){
if (resources.getId() == null) {
throw new BadRequestException(ENTITY_NAME +" ID Can not be empty");
}
public ResponseEntity update(@Validated(Role.Update.class) @RequestBody Role resources){
roleService.update(resources);
return new ResponseEntity(HttpStatus.NO_CONTENT);
}
@Log("修改角色权限")
@PutMapping(value = "/roles/permission")
@PreAuthorize("hasAnyRole('ADMIN','ROLES_ALL','ROLES_EDIT')")
public ResponseEntity updatePermission(@RequestBody Role resources){
roleService.updatePermission(resources,roleService.findById(resources.getId()));
return new ResponseEntity(HttpStatus.NO_CONTENT);
}
@Log("修改角色菜单")
@PutMapping(value = "/roles/menu")
@PreAuthorize("hasAnyRole('ADMIN','ROLES_ALL','ROLES_EDIT')")
public ResponseEntity updateMenu(@RequestBody Role resources){
roleService.updateMenu(resources,roleService.findById(resources.getId()));
return new ResponseEntity(HttpStatus.NO_CONTENT);
}
@Log("删除角色")
@DeleteMapping(value = "/roles/{id}")
@PreAuthorize("hasAnyRole('ADMIN','ROLES_ALL','ROLES_DELETE')")
......
......@@ -59,12 +59,6 @@ public class UserController {
private static final String ENTITY_NAME = "user";
@GetMapping(value = "/users/{id}")
@PreAuthorize("hasAnyRole('ADMIN','USER_ALL','USER_SELECT')")
public ResponseEntity getUser(@PathVariable Long id){
return new ResponseEntity(userService.findById(id), HttpStatus.OK);
}
@Log("查询用户")
@GetMapping(value = "/users")
@PreAuthorize("hasAnyRole('ADMIN','USER_ALL','USER_SELECT')")
......@@ -85,10 +79,7 @@ public class UserController {
@Log("修改用户")
@PutMapping(value = "/users")
@PreAuthorize("hasAnyRole('ADMIN','USER_ALL','USER_EDIT')")
public ResponseEntity update(@Validated @RequestBody User resources){
if (resources.getId() == null) {
throw new BadRequestException(ENTITY_NAME +" ID Can not be empty");
}
public ResponseEntity update(@Validated(User.Update.class) @RequestBody User resources){
userService.update(resources);
return new ResponseEntity(HttpStatus.NO_CONTENT);
}
......
......@@ -67,7 +67,6 @@ public interface MenuService {
* @param menuDTOS
* @return
*/
@Cacheable(keyGenerator = "keyGenerator")
Map buildTree(List<MenuDTO> menuDTOS);
/**
......@@ -82,6 +81,5 @@ public interface MenuService {
* @param byRoles
* @return
*/
@Cacheable(keyGenerator = "keyGenerator")
Object buildMenus(List<MenuDTO> byRoles);
}
......@@ -6,6 +6,8 @@ import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import java.util.Set;
/**
* @author jie
* @date 2018-12-03
......@@ -49,4 +51,27 @@ public interface RoleService {
*/
@Cacheable(key = "'tree'")
Object getRoleTree();
/**
* findByUsers_Id
* @param id
* @return
*/
Set<Role> findByUsers_Id(Long id);
/**
* updatePermission
* @param resources
* @param roleDTO
*/
@CacheEvict(allEntries = true)
void updatePermission(Role resources, RoleDTO roleDTO);
/**
* updateMenu
* @param resources
* @param roleDTO
*/
@CacheEvict(allEntries = true)
void updateMenu(Role resources, RoleDTO roleDTO);
}
......@@ -49,6 +49,7 @@ public interface UserService {
* @param userName
* @return
*/
@Cacheable(keyGenerator = "keyGenerator")
User findByName(String userName);
/**
......
......@@ -29,8 +29,6 @@ public class MenuDTO {
private String icon;
private Set<RoleDTO> roles;
private List<MenuDTO> children;
private Timestamp createTime;
......
......@@ -20,5 +20,7 @@ public class RoleDTO implements Serializable {
private Set<PermissionDTO> permissions;
private Set<MenuDTO> menus;
private Timestamp createTime;
}
......@@ -11,7 +11,6 @@ import me.zhengjie.modules.system.repository.MenuRepository;
import me.zhengjie.modules.system.service.MenuService;
import me.zhengjie.modules.system.service.dto.MenuDTO;
import me.zhengjie.modules.system.service.mapper.MenuMapper;
import me.zhengjie.utils.ListSortUtil;
import me.zhengjie.utils.ValidationUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -41,9 +40,7 @@ public class MenuServiceImpl implements MenuService {
public List<MenuDTO> findByRoles(Set<Role> roles) {
Set<Menu> menus = new LinkedHashSet<>();
for (Role role : roles) {
ListSortUtil<Menu> sortList = new ListSortUtil<Menu>();
List<Menu> menus1 = role.getMenus().stream().collect(Collectors.toList());
sortList.sort(menus1, "sort", "asc");
List<Menu> menus1 = menuRepository.findByRoles_IdOrderBySortAsc(role.getId()).stream().collect(Collectors.toList());
menus.addAll(menus1);
}
return menus.stream().map(menuMapper::toDto).collect(Collectors.toList());
......@@ -85,7 +82,6 @@ public class MenuServiceImpl implements MenuService {
menu.setIFrame(resources.getIFrame());
menu.setPid(resources.getPid());
menu.setSort(resources.getSort());
menu.setRoles(resources.getRoles());
menuRepository.save(menu);
}
......@@ -141,11 +137,9 @@ public class MenuServiceImpl implements MenuService {
}
}
}
Integer totalElements = menuDTOS!=null?menuDTOS.size():0;
Map map = new HashMap();
map.put("content",trees.size() == 0?menuDTOS:trees);
map.put("totalElements",totalElements);
map.put("totalElements",menuDTOS!=null?menuDTOS.size():0);
return map;
}
......
......@@ -47,18 +47,19 @@ public class PermissionServiceImpl implements PermissionService {
@Override
@Transactional(rollbackFor = Exception.class)
public void update(Permission resources) {
Optional<Permission> optionalPermission = permissionRepository.findById(resources.getId());
ValidationUtil.isNull(optionalPermission,"Permission","id",resources.getId());
Permission permission = optionalPermission.get();
/**
* 根据实际需求修改
*/
if(permission.getId().equals(1L)){
if(resources.getId().equals(1L)){
throw new BadRequestException("该权限不能被修改");
}
Optional<Permission> optionalPermission = permissionRepository.findById(resources.getId());
ValidationUtil.isNull(optionalPermission,"Permission","id",resources.getId());
Permission permission = optionalPermission.get();
Permission permission1 = permissionRepository.findByName(resources.getName());
if(permission1 != null && !permission1.getId().equals(permission.getId())){
......@@ -80,6 +81,7 @@ public class PermissionServiceImpl implements PermissionService {
if(id.equals(1L)){
throw new BadRequestException("该权限不能被删除");
}
List<Permission> permissionList = permissionRepository.findByPid(id);
for (Permission permission : permissionList) {
permissionRepository.delete(permission);
......
......@@ -47,18 +47,20 @@ public class RoleServiceImpl implements RoleService {
@Override
@Transactional(rollbackFor = Exception.class)
public void update(Role resources) {
Optional<Role> optionalRole = roleRepository.findById(resources.getId());
ValidationUtil.isNull(optionalRole,"Role","id",resources.getId());
Role role = optionalRole.get();
/**
* 根据实际需求修改
*/
if(role.getId().equals(1L)){
if(resources.getId().equals(1L)){
throw new BadRequestException("该角色不能被修改");
}
Optional<Role> optionalRole = roleRepository.findById(resources.getId());
ValidationUtil.isNull(optionalRole,"Role","id",resources.getId());
Role role = optionalRole.get();
Role role1 = roleRepository.findByName(resources.getName());
if(role1 != null && !role1.getId().equals(role.getId())){
......@@ -67,14 +69,38 @@ public class RoleServiceImpl implements RoleService {
role.setName(resources.getName());
role.setRemark(resources.getRemark());
roleRepository.save(role);
}
@Override
public void updatePermission(Role resources, RoleDTO roleDTO) {
/**
* 根据实际需求修改
*/
if(resources.getId().equals(1L)){
throw new BadRequestException("该角色不可操作");
}
Role role = roleMapper.toEntity(roleDTO);
role.setPermissions(resources.getPermissions());
roleRepository.save(role);
}
@Override
public void updateMenu(Role resources, RoleDTO roleDTO) {
/**
* 根据实际需求修改
*/
if(resources.getId().equals(1L)){
throw new BadRequestException("该角色不可操作");
}
Role role = roleMapper.toEntity(roleDTO);
role.setMenus(resources.getMenus());
roleRepository.save(role);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
/**
* 根据实际需求修改
*/
......@@ -98,4 +124,9 @@ public class RoleServiceImpl implements RoleService {
}
return list;
}
@Override
public Set<Role> findByUsers_Id(Long id) {
return roleRepository.findByUsers_Id(id);
}
}
......@@ -15,7 +15,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.Optional;
......@@ -59,7 +58,7 @@ public class UserServiceImpl implements UserService {
throw new BadRequestException("角色不能为空");
}
// 默认密码 123456
// 默认密码 123456,此密码是 MD5加密后的字符
resources.setPassword("14e1b600b1fd579f47433b88e8d85291");
resources.setAvatar("https://i.loli.net/2018/12/06/5c08894d8de21.jpg");
return userMapper.toDto(userRepository.save(resources));
......@@ -69,18 +68,18 @@ public class UserServiceImpl implements UserService {
@Transactional(rollbackFor = Exception.class)
public void update(User resources) {
Optional<User> userOptional = userRepository.findById(resources.getId());
ValidationUtil.isNull(userOptional,"User","id",resources.getId());
User user = userOptional.get();
/**
* 根据实际需求修改
*/
if(user.getId().equals(1L)){
if(resources.getId().equals(1L)){
throw new BadRequestException("该账号不能被修改");
}
Optional<User> userOptional = userRepository.findById(resources.getId());
ValidationUtil.isNull(userOptional,"User","id",resources.getId());
User user = userOptional.get();
User user1 = userRepository.findByUsername(user.getUsername());
User user2 = userRepository.findByEmail(user.getEmail());
......@@ -107,7 +106,6 @@ public class UserServiceImpl implements UserService {
@Override
@Transactional(rollbackFor = Exception.class)
public void delete(Long id) {
/**
* 根据实际需求修改
*/
......
......@@ -10,7 +10,7 @@ import org.mapstruct.ReportingPolicy;
* @author jie
* @date 2018-12-17
*/
@Mapper(componentModel = "spring",uses = {RoleMapper.class},unmappedTargetPolicy = ReportingPolicy.IGNORE)
@Mapper(componentModel = "spring",uses = {},unmappedTargetPolicy = ReportingPolicy.IGNORE)
public interface MenuMapper extends EntityMapper<MenuDTO, Menu> {
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment